我曾经使用Flask-OAuthlib
,但由于不再支持它,我已切换到 Authlib与 flask 。我将 OpenID Connect 支持与 OpenID 配置链接结合使用(与此示例几乎相同: https://github.com/authlib/demo-oauth-client/blob/master/flask-google-login/app.py )。它与 Google 完美配合,但是,我在使用 Azure AD 时遇到问题。我已设置好一切,流程运行,Azure 完成整个登录并请求权限。但是,一旦通过,Authlib 本身会在验证返回的 ID token 中的 iss
声明时,在 client.parse_id_token()
方法中引发错误。
引发的错误是authlib.jose.errors.InvalidClaimError:invalid_claim:无效声明“iss”
。使用 Flask 的调试器并阅读 _validate_claim_value()
函数的源代码,我确认它正在尝试比较 https://login.microsoftonline.com/{tenantid}/v2.0 '
到相同的 URL,但将 {tenant}
替换为固定 GUID(根据 https://learn.microsoft.com/en-us/azure/active-directory/develop/id-tokens 上的文档)。
我的猜测是我的应用程序应该以某种方式在这里进行替换,然后让验证进行,但是,我不知道该怎么做。问题是:在 Authlib 中是否有一种好方法可以在验证声明之前执行此操作?
附注:我已经看到并知道 loginpass ,但想首先使用 Stock Authlib 进行探索,因为这是一个现有的应用程序,如果可能的话,我不想用蓝图搞乱那么多。
最佳答案
我无法对 Authlib 发表评论,因为它是第 3 方库。但是,是的,您需要在 https://login.microsoftonline.com/{tenantid}/v2.0 中拥有 iss 声明。格式。
就此而言,Microsoft 提供了 Microsoft Authentication Library (MSAL) for Python作为官方 SDK 与 Microsoft Identity platform 集成(包括 Azure AD)。
关于python - Authlib 与 Azure AD - "iss"声明的声明验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674426/