首页 > 解决方案 > Authlib 与 Azure AD - “iss”声明的声明验证错误

问题描述

我曾经使用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 完成整个登录并询问权限。client.parse_id_token()但是,一旦通过,Authlib 本身会在方法中引发错误,同时iss从返回的 ID 令牌验证声明。

引发的错误是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 中是否有一种好方法可以做到这一点?

PS:我已经看到并知道loginpass,但想先探索一下使用股票 Authlib,因为这是一个现有的应用程序,如果可能的话,我不想把蓝图弄得这么乱。

标签: pythonazureauthlib

解决方案


我无法评论 Authlib,因为那是第 3 方库。但是是的,您需要有https://login.microsoftonline.com/{tenantid}/v2.0格式的 iss 声明。

需要注意的是,Microsoft为 Python 提供 Microsoft Authentication Library (MSAL)作为官方 SDK,以与Microsoft Identity 平台(包括 Azure AD)集成。


推荐阅读