Azure AD:使用PKCE的代码流程:应用程序未启用id_token

3

我正在尝试将React单页应用(SPA)与Azure AD集成。我正在遵循文档(例如该场景),并使用react-aad-msal的示例来检查基本操作是否正常。

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

AADSTS700054:应用程序未启用'response_type'为"id_token"的功能。

现在,文档非常清楚,对于SPAs,具有PKCE的授权代码流是正确的方式,而且您不应该使用隐式授权码流,因为它不安全。这意味着现有类似问题的答案(例如这个另一个),建议盲目打开隐式流设置的方法是不完整的。

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

(我还不确定,但是react-aad-msal可能也在使用隐式流。我没有找到任何指示它要使用哪个流的设置。)

3个回答

1
我遇到了这个Blazor WASM建筑物(.NET 6和最新的库),但我认为我的解决方案仍然适用于某些人。
在尽可能密切地遵循此处的教程后,我仍然收到“未启用id_token”的消息。我注意到让我困惑的一件事是关于注册客户端应用程序的教程的这一部分: enter image description here 但是,如果您查看Azure门户,实际的复选框似乎是相反的: enter image description here 我把这归因于教程中的错误,并将它们保持未选中状态,认为这应该允许我使用身份验证代码流。尝试了所有方法,仍然收到相同的消息。准备放弃整个问题时,我启用了访问令牌和ID令牌。
事情开始起作用!但是查看网络流量时,实际上在访问应用程序时多次调用/authorize端点。第一次使用response_type=id_token,然后在此之后使用response_type=code
最终意识到这是由部署在应用服务上的/authsettings资源引起的。Azure试图使用response_type=id_token对应用服务本身进行身份验证。
在移至没有任何身份验证设置的新应用程序服务后,只依赖于应用程序的配置来重定向未经身份验证的用户,auth code flow就可以工作,并且应用程序注册中的复选框未被选中。

0

虽然我没有尝试 @Ryan D 的解决方案来创建一个全新的应用服务,但它启发了我尝试其他方法。我进入了我的现有应用服务并删除了身份验证,因为我已经在我的应用程序中内置了它。它已经编程在代码中了。这修复了关于 ID 令牌的错误。

我做了以下事情:

  1. 登录 Azure 门户。
  2. 转到应用服务。
  3. 选择您的应用程序
  4. 在左侧的设置下,单击身份验证
  5. 删除您设置的身份验证方法。对我来说,它是 Microsoft。

我想如果您已经将其全部内置到应用程序代码中,则不需要在 Azure 中设置它?现在当我启动我的应用程序时,我会得到 Microsoft 登录。

因此,您可能不必重新创建一个全新的应用服务,尽管每个人的情况都不同。这就是为我解决问题的方法。

编辑:此更新使我能够访问我的应用程序,但我无法连接到我们的内部数据库。仍在努力确定它是否与 Azure 中的身份验证有关。


0

react-aad-msal 实际上并没有说明它使用的是哪个版本的 MSAL。目前有 2 个版本:

  • MSAL 1.x 仅支持隐式流。
  • MSAL 2.0 支持 PKCE 验证码的授权代码流

react-aad-msal 的 JavaScript 示例的 package.json 文件明显使用的是 MSAL 1.x:

    "msal": "^1.2.0",

这就是我的问题所在。隐式流。无法使用react-aad-msal进行带有PKCE的授权代码流。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接