编辑:似乎存储在会话中的redirect_uri不会在调用之间持续存在。
使用loginpass作为OAuth2客户端,使用来自The Example Repo的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参数。服务器用auth代码响应,然后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.')
答案 0 :(得分:0)
问题是我在本地主机上以及OAuth客户端应用程序上运行OAuth Server应用程序。他们会覆盖彼此的cookie,从而导致
解决方案是让应用程序在不同的域上运行-在这种情况下,通过localhost vs 127.0.0.1获得。