我以前用的是Flask-OAuthlib,但现在不再支持了,所以我换成了带Flask的Authlib。我通过OpenID配置链接使用OpenID连接支持(与本例几乎相同:https://github.com/authlib/demo-oauth-client/blob/master/flask-google-login/app.py)。它在Google上工作得很好,然而,我在Azure AD上遇到了一个问题。我已经设置好了所有的东西,流程开始运行,Azure完成了所有的登录和权限请求。但是,一旦通过,Authlib本身就会在验证返回的ID令牌中的iss声明时在client.parse_id_token()方法中抛出一个错误。
引发的错误是authlib.jose.errors.InvalidClaimError: invalid_claim: Invalid claim "iss"。使用Flask的调试器并读取_validate_claim_value()函数的源代码,我已经确认它正在尝试将https://login.microsoftonline.com/{tenantid}/v2.0'与相同的URL进行比较,但将{tenant}替换为固定的GUID (根据https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens上的文档)。
我的猜测是,我的应用程序应该以某种方式在这里进行替换,然后让验证飞行,然而,我不确定如何做到这一点。问题是:在验证声明之前,在Authlib中有没有好的方法可以做到这一点?
附言:我已经看到并了解了loginpass,但我想先使用股票Authlib来探索,因为这是一个现有的应用程序,如果可能的话,我不想把蓝图搞得一团糟。
发布于 2020-07-08 15:46:48
我不能评论Authlib,因为它是第三方的库。但是,是的,你需要有https://login.microsoftonline.com/{tenantid}/v2.0格式的国际空间站声明。
在这一点上,微软提供了Microsoft Authentication Library (MSAL) for Python作为与Microsoft Identity platform (包括Azure AD)集成的官方开发工具包。
https://stackoverflow.com/questions/62674426
复制相似问题