11

我尝试使用授权代码和 Azure AD B2C(客户端上的 oidc-client)为 Angular 应用程序设置身份验证,但我从 Angular 收到这些错误:

在此处输入图像描述

在查看 B2C 审计日志后,我发现了以下错误消息:

客户在兑换机密授权时必须发送 client_secret。

这是我的客户端配置:

const settings = {
  stsAuthority: 'https://supportodqqcdev.b2clogin.com/supportodqqcDev.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignUpSignInOdqPlatine',
  clientId: '8447df5b-35a0-40a7-944f-5dcce87a2193',
  clientRoot: 'https://localhost:4200',
  scope: 'openid https://supportodqqcDev.onmicrosoft.com/platineclientdev/read',
};
this.userManager = new UserManager({
  authority: settings.stsAuthority,
  client_id: settings.clientId,
  redirect_uri: `${settings.clientRoot}/signin-callback`,
  scope: settings.scope,
  response_type: 'code',
  post_logout_redirect_uri: `${settings.clientRoot}/signout-callback`,
  automaticSilentRenew: true,
  silent_redirect_uri: `${settings.clientRoot}/assets/signin-silent-callback.html`,
});

如果我将上述配置切换为使用本地 IdentityServer 实例,则一切正常。

有人能指出我应该在哪里或如何调查这个吗?

4

4 回答 4

25

我和你有完全相同的问题,只是能够解决它。

AD 正在向您请求 client_secret,因为它还没有为 PKCE 配置。要告诉 AD 您想将 PKCE 用于特定的重定向 url,您需要将其类型设置为从'Web'to 'Spa'。这可以在清单中完成。

replyUrlsWithType在 Manifest 中搜索该属性并查找您的.../signin-callbackurl。将其类型更改为'Spa',您应该会很好。

例如。:

"replyUrlsWithType": [
    {
        "url": "http://localhost:8080/signin-callback",
        "type": "Spa"
    },
]

配置的 url 现在将从您的授权页面中消失,但没关系 -> 它仍然存在于清单中。MS 团队正在研究这种新类型。

还要确保将您的应用程序标记为公共客户端。

有关更多信息,请在此处查看我的回答:Active Directory 是否不支持 PKCE 的授权代码流?

于 2020-04-17T13:10:19.753 回答
3

在 Azure AD B2C 应用程序中,现在有一个更简单的选项来执行此操作。在 Web 重定向 URI 所在的身份验证选项卡中,您可能会看到一条消息This app has implicit grant settings enabled. If you are using any of these URIs in a SPA with MSAL.js 2.0, you should migrate URIs。当您单击它时,一个新窗口将让您选择要移动到 SPA 重定向 URI 的重定向 URI:

迁移到单页应用程序 (SPA)

之后只需单击Configure它应该可以工作。重定向 URI 现在将位于 SPA 部分而不是 Web 部分。

在此处输入图像描述

于 2021-08-30T10:08:50.020 回答
0

您的图像显示 CORS 错误。

我不确定 oidc-client 是否可以与 B2C 一起使用 OOTB。它更多地用于身份服务器。

查看msal.js 示例

于 2019-12-03T20:26:45.123 回答
0

我怀疑您的代码很好,但是...

我最后一次听说,Azure AD 不允许跨源调用令牌端点——因此不支持 SPA 应在 2019 年使用的授权代码流 (PKCE)。

除非我弄错了,否则这意味着您在与 Azure AD 集成时需要使用(不推荐的)隐式流。几年来,SPA 一直存在问题。

出于兴趣,几年前我在 Azure SPA workrounds 上写了几篇文章 - 我怀疑其中一些仍然相关: https ://authguidance.com/2017/11/30/azure-active-directory-setup/

于 2019-12-03T20:30:50.290 回答