首页 > 解决方案 > Azure AD:带有 PKCE 的代码流:没有为应用程序启用 id_token

问题描述

我正在尝试将 React 单页应用程序 (SPA) 与 Azure AD 集成。我正在关注文档(例如场景)并使用react-aad-msal中的示例来查看事情是否在基本级别上正常工作。

但是,尝试访问 Microsoft 登录页面时出现以下错误:

AADSTS700054:没有为应用程序启用 response_type 'id_token'。

现在,文档非常清楚,对于 SPA,使用 PKCE 的身份验证代码流是可行的方法,您不应该使用隐式授权流,因为它是不安全的。这意味着对类似问题(例如这个另一个)的现有答案,这表明盲目地打开隐式流程的设置,是不充分的。

是否可以在不使用隐式流的情况下为 SPA 启用登录(ID 令牌)和 API 访问(访问令牌) ?

(我还不确定,但也有可能react-aad-msal使用隐式流。我还没有找到任何设置来告诉它使用哪个流。)

标签: oauth-2.0azure-active-directory

解决方案


我遇到了 Blazor WASM(带有所有最新库的 .NET 6),但我认为我的解决方案可能仍然适用于某些人。

尽可能密切地遵循本教程之后,我仍然收到“id_token 未启用”消息。我注意到让我很困惑的一件事是关于注册客户端应用程序的教程的这一部分: 在此处输入图像描述

但是,如果您查看 Azure 门户,实际的复选框似乎是相反的: 在此处输入图像描述

我将此归结为教程中的一个错误,并让他们未经检查认为应该允许我使用身份验证代码流。尝试了一切,但仍然收到相同的消息。准备好解决整个问题,我启用了访问令牌和 ID 令牌。

事情开始起作用了!但是查看网络流量,它实际上是在访问应用程序时多次调用 /authorize 端点。第一次用response_type=id_token,然后用response_type=code

最终意识到这是由部署在应用服务上的 /authsettings 资源引起的。Azure 试图使用response_type=id_token.

在迁移到没有任何身份验证设置的新应用服务后,仅依靠应用程序的配置来重定向未经身份验证的用户,身份验证代码流工作,并且应用程序注册中的复选框未选中。


推荐阅读