Azure AD B2C:客户在兑换机密赠款时必须发送 client_secret
Azure AD B2C: Clients must send a client_secret when redeeming a confidential grant
我尝试使用授权码和 Azure AD B2C(客户端的 oidc-client)为 Angular 应用程序设置身份验证,但我从 Angular 收到这些错误:
查看 B2C 审计日志后,我发现了这条错误消息:
Clients must send a client_secret when redeeming a confidential grant.
这是我的客户端配置:
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 实例,一切正常。
有人能指出我应该在哪里或如何调查这个问题吗?
您的图像显示 CORS 错误。
我不确定 oidc-client 是否适用于 B2C 的 OOTB。它更多用于身份服务器。
我怀疑您的代码没有问题,但是...
我最后听说,Azure AD 不允许对令牌端点进行跨源调用 - 因此不支持 SPA 应在 2019 年使用的授权代码流 (PKCE)。
除非我弄错了,否则这意味着您在与 Azure AD 集成时需要使用(不推荐的)隐式流。 SPA 几年来一直存在问题。
出于兴趣,我在几年前写了一些关于 Azure SPA 工作区的帖子 - 我怀疑其中一些仍然相关:
https://authguidance.com/2017/11/30/azure-active-directory-setup/
我遇到了与您完全相同的问题,并且能够解决它。
AD 正在向您请求 client_secret,因为它尚未针对 PKCE 配置。要告诉 AD 您想要将 PKCE 用于特定的重定向 url,您需要将其类型从 'Web'
设置为 'Spa'
。这可以在清单中完成。
在清单中搜索 属性 replyUrlsWithType
并查找您的 .../signin-callback
url。将其类型更改为 'Spa'
,你应该会很好。
例如:
"replyUrlsWithType": [
{
"url": "http://localhost:8080/signin-callback",
"type": "Spa"
},
]
配置的 url 现在将从您的授权页面中消失,但没关系 -> 它仍然存在于清单中。 MS 团队正在研究这种新类型。
还要确保将您的应用程序标记为 public 客户端。
有关更多信息,请在此处查看我的回答:
在 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
。当您单击它时,一个新的 window 将让您选择要移动到 SPA 重定向 URI 的重定向 URI:
之后只需单击 Configure
即可。重定向 URI 现在将位于 SPA 部分而不是 Web 部分。
在一些评论中,我将其解读为 'ADB2C currently supporting PKCE flow for Native Applications but not for Web',我知道这是一个有点老的讨论话题,但我只是想告知目前 PKCE 被推荐用于包括 Web 应用程序在内的所有应用程序。
我尝试使用授权码和 Azure AD B2C(客户端的 oidc-client)为 Angular 应用程序设置身份验证,但我从 Angular 收到这些错误:
查看 B2C 审计日志后,我发现了这条错误消息:
Clients must send a client_secret when redeeming a confidential grant.
这是我的客户端配置:
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 实例,一切正常。
有人能指出我应该在哪里或如何调查这个问题吗?
您的图像显示 CORS 错误。
我不确定 oidc-client 是否适用于 B2C 的 OOTB。它更多用于身份服务器。
我怀疑您的代码没有问题,但是...
我最后听说,Azure AD 不允许对令牌端点进行跨源调用 - 因此不支持 SPA 应在 2019 年使用的授权代码流 (PKCE)。
除非我弄错了,否则这意味着您在与 Azure AD 集成时需要使用(不推荐的)隐式流。 SPA 几年来一直存在问题。
出于兴趣,我在几年前写了一些关于 Azure SPA 工作区的帖子 - 我怀疑其中一些仍然相关: https://authguidance.com/2017/11/30/azure-active-directory-setup/
我遇到了与您完全相同的问题,并且能够解决它。
AD 正在向您请求 client_secret,因为它尚未针对 PKCE 配置。要告诉 AD 您想要将 PKCE 用于特定的重定向 url,您需要将其类型从 'Web'
设置为 'Spa'
。这可以在清单中完成。
在清单中搜索 属性 replyUrlsWithType
并查找您的 .../signin-callback
url。将其类型更改为 'Spa'
,你应该会很好。
例如:
"replyUrlsWithType": [
{
"url": "http://localhost:8080/signin-callback",
"type": "Spa"
},
]
配置的 url 现在将从您的授权页面中消失,但没关系 -> 它仍然存在于清单中。 MS 团队正在研究这种新类型。
还要确保将您的应用程序标记为 public 客户端。
有关更多信息,请在此处查看我的回答:
在 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
。当您单击它时,一个新的 window 将让您选择要移动到 SPA 重定向 URI 的重定向 URI:
之后只需单击 Configure
即可。重定向 URI 现在将位于 SPA 部分而不是 Web 部分。
在一些评论中,我将其解读为 'ADB2C currently supporting PKCE flow for Native Applications but not for Web',我知道这是一个有点老的讨论话题,但我只是想告知目前 PKCE 被推荐用于包括 Web 应用程序在内的所有应用程序。