1

我正在尝试使用 PKCE 一个角度项目来实现授权代码流。我正在使用 angular-auth-oidc-client。我们已经有一个现有的基于 IdentityServer4 的内部实现,客户端可以很好地对抗它,但我们现在正尝试将我们的身份验证迁移到 Azure AD B2C,而不是在内部实现。

我已经配置了 Azure AD B2C 和我的客户端应用程序。这是配置: 我的应用配置

这是我在客户端 OIDC 服务上的配置:

oidcConfigService.withConfig({
    stsServer: 'https://login.microsoftonline.com/mycompany.onmicrosoft.com/v2.0',
    authWellknownEndpoint:
        'https://mycompany.b2clogin.com/mycompany.onmicrosoft.com/B2C_1_SignUpSignIn/v2.0/.well-known/openid-configuration',
    redirectUrl: window.location.origin,
    postLogoutRedirectUri: window.location.origin,
    clientId: 'client-id-guid-goes-here',
    scope: 'openid profile offline_access',
    responseType: 'code',
    silentRenew: true,
    autoUserinfo: false,
    silentRenewUrl: window.location.origin + '/silent-renew.html',
    logLevel: LogLevel.Debug,
    renewTimeBeforeTokenExpiresInSeconds: 60
});

问题:在令牌响应中没有访问令牌: 没有 access_token

即使我在客户端配置中检查了 accesss_token 复选框。我在这里想念什么?

4

3 回答 3

2

根据微软文档:GetAccessToken

您需要在范围内添加App ID

而不是范围:'openid profile offline_access',使用:范围:'openid profile offline_access APPID '

示例:范围:'openid profile offline_access 64d188a5-f9a4-4b8e-9dcd-d9c9f48ea01f '

于 2021-04-10T06:11:19.210 回答
2

除非您明确请求对您的 API 之一的权限,否则它不会自动返回 AccessToken。

当您开始使用 B2C 时,这是一个简单的陷阱。

要获得一个,access_token您必须访问 Azure AD B2C 门户并为您的客户端应用程序公开一个 API。这表示:

  • 为您的 API 添加自定义范围
  • 将范围添加为您的应用的 API 权限
  • 调整客户端上的登录配置以使用此范围

API 权限

在使用我的身份验证库 ( @azure/msal-browser @2.1)尝试使用 PKCE 的身份验证代码流时,我发现在幕后它总是与https://login.microsoftonline.com/common/配合得很好,但我没有不必为访问令牌付出任何额外的努力。在切换到我们公司的 Azure Active Directory B2C 后,这种行为发生了变化,并且它不会自动返回,access_token除非我明确请求对我们的一个 API 的权限。

从好的方面来说,尽管还值得一提的是,使用 Azure AD B2C 时,带有 PKCE 的身份验证代码流运行良好,尽管据我所知,它还没有经过生产环境的实战测试(请参阅此 GitHub 问题)。

于 2020-10-02T22:04:36.327 回答
0

不包括访问令牌,因为您没有请求访问某些内容。

你需要在这里传递一些额外的范围:

scope: 'openid profile offline_access',
于 2020-08-28T07:04:10.920 回答