Authlib 0.6+与Flask集成时Auth0模拟功能异常问题
Auth0模拟功能与Authlib Flask客户端的适配问题
Auth0的模拟功能会直接调用认证成功后的回调URL,跳过了常规的初始认证步骤,这给我们带来了不小的麻烦:
- 回调处理逻辑中调用的
flask/client/OAuth.authorize_access_token()方法依赖会话变量_auth0_callback_,但设置该变量的flask/client/OAuth.authorize_redirect()方法根本没被执行,导致这个关键变量缺失,方法调用失败。 - 我们临时做了个补救方案:在调用
authorize_access_token()之前手动补设_auth0_callback_变量,但不确定这种操作是否符合Authlib的设计规范,会不会埋下其他隐患。 - 除此之外,我们还遇到了
_auth0_state_会话变量的类似问题,测试环境使用的Authlib v0.7版本似乎已经修复了这个问题,但生产环境目前还在使用v0.6版本,暂时没法直接升级。
我们之前提交过相关问题,但一直没有收到回复,希望能得到大家的帮助!
更新:深入研究Authlib后的发现
仔细梳理了Authlib的代码逻辑后,我们发现了一个关键点:如果授权响应中包含令牌,那么调用flask/client/OAuth.authorize_access_token()时,OAuth2Session.fetch_access_token()方法不需要依赖回调URL就能获取到令牌。按Auth0模拟功能的设计,它的授权响应应该是包含访问令牌的,但目前看来,要么是这个令牌根本不存在,要么就是传递过程中出现了问题,才导致了之前的报错。
内容的提问来源于stack exchange,提问作者tazmaniax
相关产品推荐
相关产品推荐

