Flask loginpass OAuth客户端-行为不正确

Flask loginpass OAuth客户端-行为不正确,flask,authlib,Flask,Authlib,编辑:会话中存储的重定向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向OAut

编辑:会话中存储的重定向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服务器发送一个重定向uri参数。服务器使用身份验证代码进行响应,然后loginpass请求一个令牌,但不包括重定向uri

OAuth2在处理请求时引发InvalidRequestError,因为(根据RFC 6749第4.1.3节)

重定向\u 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.')

问题是我在本地主机上运行OAuth服务器应用程序以及OAuth客户端应用程序。他们会覆盖对方的cookies,从而导致

  • 客户端应用程序正在丢失会话状态
  • authlib客户端库未将重定向URI发送到令牌端点
  • OAuth服务器拒绝令牌请求,因为重定向URI与身份验证代码请求中的URI不同

解决方案是让这些应用程序在不同的域上运行——在本例中是通过localhost vs 127.0.0.1实现的

谢谢,这帮了大忙。我能够使用@lepture的comments()来解决我的问题,但这一条让我走上了正确的道路。