编辑:似乎存储在 Session 中的 redirect_uri 不会在调用中持续存在。
使用 loginpass 作为 OAuth2 客户端,使用示例仓库中的 authlib 服务器作为 OAuth2 服务器。
在 loginpass 中使用此代码
bp = create_flask_blueprint(backend, oauth, handle_authorize)
app.register_blueprint(bp, url_prefix='/{}'.format(backend.OAUTH_NAME))
在授权步骤中,loginpass 向 OAuth2 服务器发送一个 redirect_uri 参数。服务器用验证码响应,然后 loginpass 请求一个令牌,但不包括 redirect_uri。
OAuth2 在处理请求时引发 InvalidRequestError 因为(根据 RFC 6749 的第 4.1.3 节)
redirect_uri 需要,如果“redirect_uri”参数包含在授权请求中,如第 4.1.1 节所述,并且它们的值必须相同。
引发 InvalidRequestError 的服务器代码
redirect_uri = self.request.redirect_uri
_redirect_uri = authorization_code.get_redirect_uri()
original_redirect_uri = _redirect_uri or None
if redirect_uri != original_redirect_uri:
raise InvalidRequestError('Invalid "redirect_uri" in request.')