将 Keycloak 与 Azure B2C 作为身份提供者集成并使用授权代码流程

问题描述 投票:0回答:1

我正在尝试使用授权代码流将 Keycloak 与 Azure B2C 集成。我已将 Keycloak 实例部署为 Azure 应用服务,Azure B2C 租户和演示 SPA 应用程序正在尝试通过 Keycloak 对 Azure B2C 进行身份验证。首先,我开始尝试使用 Azure B2C 直接验证 SPA,在直接验证成功后,我尝试将 Keylcoak 放在中间。这就是我陷入困境的地方。

在azure b2c中,我将keycloak注册为应用程序,并将重定向url指定为SPA,以使用授权代码流程进行身份验证: 在 keycloak 中,我将 Azure B2C 注册为身份提供商:

最后我的 SPA 配置如下所示(我使用 oidc-client):

authority: environment.keycloakB2CConfig.url + '/realms/' + environment.keycloakB2CConfig.realm,
client_id: environment.keycloakB2CConfig.clientId,
redirect_uri: 'http://localhost:4200/auth-callback',
post_logout_redirect_uri: 'http://localhost:4200',
response_type: 'code',
scope: 'https://myorgname.onmicrosoft.com/all/allApi openid profile offline_access', 
filterProtocolClaims: true,
loadUserInfo: false

完成所有这些操作后,我在 Azure B2C 中遇到错误:公共客户端在兑换公开获得的赠款时不应发送 client_secret。

在我看来,Azure B2C 将 Keycloak 视为公共客户端,因为它注册为 SPA,因此它不满意发送客户端密钥进行身份验证。另一方面,我不明白如何向 Azure B2C 注册 Keycloak 以支持 SPA 以外的授权代码流。我也无法在 Keycloak 中找到任何在不发送客户端密钥的情况下注册身份提供者的选项。文档和教程非常有限,因此如果有人能够以任何可能的方式成功集成这两者(即使仅通过隐式流程) - 请提供帮助。

angular keycloak single-page-application aad-b2c oidc-client
1个回答
0
投票

您走在正确的轨道上,流程将如下所示:

A)。客户端(SPA)作为公共客户端针对授权服务器(AS)运行代码流,在您的情况下是 Keycloak

B)。 AS 运行第二个代码流作为身份提供商 (IDP) 的联合机密客户端,在您的情况下是 Azure B2C

注册将像这样进行:

1)。在 AS 中注册 SPA 公共客户端,无需客户端密钥

2)。在 IDP 中将 AS 注册为机密客户端。这将生成一个客户端 ID 和密钥。

3)。使用相同的客户端 ID 和密钥在 AS 中注册 IDP。

所以感觉你需要做的主要改变是在上面的步骤2和3中。在步骤 2 中,为 Azure B2C 中的客户端选择 Web 平台,而不是 SPA 类型。

© www.soinside.com 2019 - 2024. All rights reserved.