oauth-2.0 - 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
使用隐式流。我还没有找到任何设置来告诉它使用哪个流。)
解决方案
我遇到了 Blazor WASM(带有所有最新库的 .NET 6),但我认为我的解决方案可能仍然适用于某些人。
在尽可能密切地遵循本教程之后,我仍然收到“id_token 未启用”消息。我注意到让我很困惑的一件事是关于注册客户端应用程序的教程的这一部分:
但是,如果您查看 Azure 门户,实际的复选框似乎是相反的:
我将此归结为教程中的一个错误,并让他们未经检查认为应该允许我使用身份验证代码流。尝试了一切,但仍然收到相同的消息。准备好解决整个问题,我启用了访问令牌和 ID 令牌。
事情开始起作用了!但是查看网络流量,它实际上是在访问应用程序时多次调用 /authorize 端点。第一次用response_type=id_token
,然后用response_type=code
。
最终意识到这是由部署在应用服务上的 /authsettings 资源引起的。Azure 试图使用response_type=id_token
.
在迁移到没有任何身份验证设置的新应用服务后,仅依靠应用程序的配置来重定向未经身份验证的用户,身份验证代码流工作,并且应用程序注册中的复选框未选中。
推荐阅读
- javascript - 无法在 redux 操作中重命名响应
- java - 为什么我们必须使用 index!= -1 来比较 java 中的 indexOf 字母
- android - 当我单击 Recyclerview 中的 ImageView 时,我想打开对话框
- android-studio - 可编辑 $Method$($ParameterType$ $Parameter$); 在 Android Studio 的结构搜索模板中没有返回 ::: public Editable getText()
- parquet - 在单个多核机器上索引大型 dask 数据帧时的内存使用情况
- c# - 调试扫雷器时遇到问题
- ios - 让滚动条在 UiCollectionview 上始终可见?
- json - VB.net JSON(多个数据)反序列化为列表框
- c - 编写一个交互式 C 程序,从给定的“N”个数字列表中删除数组中的重复项
- ruby - ruby state_machine 事件无需调用即可触发