2015-09-20 3 views
0

Я использую модуль колбы-oauthlib развивать как OAuth 2 клиента и поставщикКолба OAuth 2 владельца ресурса пароль поток

При использовании владелец ресурса потока пароля, то провайдер не будет перенаправлять URL перенаправления клиента.

Вот мой код клиента для отправки сообщения в поставщика:

@app.route('/signin', methods=['POST', 'GET']) 
def signin(): 
    if request.method == 'POST': 
     username = request.form.get('username') 
     password = request.form.get('password') 
     f = {'client_id': 'jCce40zAaHXLxP0prU*************', 
      'client_secret': 'vzf7U219hrAjIYN70NcFo3VBQzott******', 
      'grant_type': 'password', 'scope': 'email', 
      'redirect_uri': 'http://localhost:8000/authorized', 'response_type': 'token'} 
     data = {'username': username, 'password': password} 
     encoded_url = 'http://127.0.0.1:5000/oauth/authorize?' + parse.urlencode(f) 
     headers = {"Content-Type": "application/json"} 
     requests.post(encoded_url, data=json.dumps(data), headers=headers) 
    return render_template('signin.html') 

А вот ПРОВАЙДЕР authorize_handler

@app.route('/oauth/authorize', methods=['GET', 'POST']) 
@oauth.authorize_handler 
def authorize(*args, **kwargs): 
    if request.method == 'POST': 
     details = json.loads(request.data) 
     username = details['username'] 
     password = details['password'] 
     user = User.query.filter_by(user_name=username).first() 
     if user: 
      if user.check_password(password): 
       session['id'] = user.id 
       return True 
      return False 
     return False 

    if request.method == 'GET': 
     user = current_user() 
     if not user: 
      session['redirect_after_login'] = request.url 
      return redirect('/home') 
     client_id = kwargs.get('client_id') 
     client = Client.query.filter_by(client_id=client_id).first() 
     kwargs['client'] = client 
     kwargs['user'] = user 
     return render_template('authorize.html', **kwargs) 

    confirm = request.form.get('confirm', 'no') 
    return confirm == 'yes' 

Также Колба-oauthlib регистрации OAuth 2 поставщика

Fetched credentials from request {'response_type': 'token', 'state': None, 'client_id': 'jCce40zAaHXLxP0prU************', 'redirect_uri': 'http://localhost:8000/authorized'}. 
Found redirect_uri http://localhost:8000/authorized. 
Validate client 'jCce40zAaHXLxP0prU***********' 
Save bearer token {'scope': 'email', 'access_token': 'y08hkm594YbLe2*****', 'expires_in': 180, 'token_type': 'Bearer'} 
Authorization successful. 
127.0.0.1 - - [20/Sep/2015 17:40:53] "POST /oauth/authorize?client_id=jCce40zAaHXLxP0prU*********&client_secret=vzf7U219hrAjIYN70NcFo3VBQzot**********&response_type=token&grant_type=password&scope=email&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fauthorized HTTP/1.1" 302 - 

я вижу это, токен сохраняется, но: -

  1. Перенаправление не происходит

  2. Это заставит клиента загрузить, навсегда, пока я не перезагрузить его (даже если бы я попытался получить доступ к другим маршрутам, клиент не отвечает)

Что мне не хватает?

NB:

Я реализовал на стороне сервера потока и на стороне клиента потока, и они прекрасно работали

Я еще новичок в колбу

ответ

1

Я думаю, вы смешиваете различные типы грантов от OAuth2 , С помощью учетной записи владельца ресурса грант, сервер авторизации не выполняет перенаправление, вместо этого он предоставляет маркерный ответ клиенту.

http://tools.ietf.org/html/rfc6749#section-4.3

redirect_uris связаны с Authorization Code гранта.

Смежные вопросы