我已经多次阅读Authlib的部分文档和示例,我还阅读了有关Auth 2.0概念的文章,但我不知道该怎么做。我希望我的用户进行登录(使用用户名和密码),然后我的应用程序返回一个令牌。之后用户就可以使用私有资源了@require_oauth('profile')
。
我的客户 :
*************************** 1. row ***************************
client_id: wmahDfsran1jk6CaH1knpi3n
client_secret: mnr4j15pZurBPYHq4KW4LY8HC7pS4TwjzMlJAUGmo7Bpy5gP
issued_at: 1531271519
expires_at: 0
redirect_uri: http://127.0.0.1:5000/oauth/token
token_endpoint_auth_method: client_secret_basic
grant_type: authorization_code password
response_type: code
scope: profile
client_name: client_test
client_uri: http://127.0.0.1:5000/
logo_uri: NULL
contact: NULL
tos_uri: NULL
policy_uri: NULL
jwks_uri: NULL
jwks_text: NULL
i18n_metadata: NULL
software_id: NULL
software_version: NULL
id: 2
user_id: 1
我的 POST 请求(使用Postman):
http://127.0.0.1:5000/oauth/authorize?response_type=code&client_id=wmahDfsran1jk6CaH1knpi3n
发出请求后的错误:
{
"error": "invalid_grant"
}
授权:
@routes.route('/oauth/authorize', methods=['GET', 'POST'])
def authorize():
user = current_user()
try:
grant = authorization.validate_consent_request(end_user=user)
except OAuth2Error as error:
return error.error
return authorization.create_authorization_response(grant_user=user)
令牌:
@routes.route('/oauth/token', methods=['POST', 'GET'])
def issue_token():
return authorization.create_token_response()
轮廓 :
@routes.route('/resource/profile', methods=['GET', 'POST'])
@require_oauth('profile')
def profile():
user = current_user()
return jsonify(id=user.id, username=user.username, secret=user.secret, client_id=user.client_id)
令牌继续与 Auth 示例相同。
如果我尝试在/resource/profile
没有令牌 / autorização 的情况下访问:
{"error": "missing_authorization", "error_description": "Missing \"Authorization\" in headers."}
我该如何解决?
Obs:在我解决这个问题后,我怎样才能获得 Auth Token 并将标头发送到/resource/profile
?
另一个参考:使用 OAuth 2.0 代码授予流程授权访问 Azure Active Directory Web 应用程序, OAuth 2.0:概述, invalid_grant 试图从谷歌获取 oAuth 令牌询问, 刷新访问令牌时出现“invalid_grant”错误的情况? , 授权码授予返回 invalid_grant ...