loginpass OAuth客户端-错误行为

时间:2019-06-20 03:15:15

标签: flask authlib

编辑:似乎存储在会话中的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.')

1 个答案:

答案 0 :(得分:0)

问题是我在本地主机上以及OAuth客户端应用程序上运行OAuth Server应用程序。他们会覆盖彼此的cookie,从而导致

  • 客户端应用失去会话状态
  • authlib客户端库未将重定向URI发送到令牌端点。
  • OAuth服务器拒绝令牌请求,因为重定向URI与请求auth代码中的重定向URI不同。

解决方案是让应用程序在不同的域上运行-在这种情况下,通过localhost vs 127.0.0.1获得。