1

我在 Azure AD B2C 租户 (XXXX.onmicrosoft.com) 中创建了两个应用程序

  1. 前端 - Angular 7(配置为postman
  2. 后端 - Web API - .net core 2.1(配置为childcare.webapi

在此处输入图像描述

Web API 项目是直接的 .NET Core 2.2 API 项目,使用 VS 模板创建。

appsettings.js 文件看起来像

{
  "AzureAdB2C": {       
    "Instance": "https://login.microsoftonline.com/tfp/",
    "ClientId": "APPLICATOIN-ID-OF-childcare.webapi",
    "Domain": "XXXX.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_Signup"
  }
  "AllowedHosts": "*"
}

启动代码如下所示:

public void ConfigureServices(IServiceCollection services)
    {
                services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                    .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

Postmanapp已授予对childcare.webapi范围的访问权限

在此处输入图像描述

接下来,我编辑了默认的“B2C_1_Signup”策略并添加了“Facebook”身份提供者。我从 azure 门户运行此用户流以获取我的postman应用可用于访问“ childcare.webapi”的访问令牌

在此处输入图像描述

到目前为止,一切都很好。我取回了一个范围为“ user_impersonation”的访问令牌,下面是令牌的样子...

{
  "iss": "https://login.microsoftonline.com/{GUID}/v2.0/",      
  "aud": "childcare.api APPLICATION ID",
  ...
  "idp": "facebook.com",
  ...
  "tfp": "B2C_1_Signup",      
  "scp": "user_impersonation",
  "azp": "postman app APPLICATION ID",      
}

有了这个访问令牌,我成功地childcare.api使用邮递员应用程序调用端点。

在此处输入图像描述

问题

现在我想在我的 Angular 6 应用程序中获取相同的访问令牌。我正在使用流行的图书馆"@azure/msal-angular": "^0.1.2"

下面是我的 MsalModule 配置。

imports: [
    BrowserModule,
    AppRoutingModule,
    MsalModule.forRoot({
      clientID: 'POSTMAN APP CLIENT ID',
      authority: 'https://login.microsoftonline.com/tfp/XXXX.onmicrosoft.com/B2C_1_Signup', // working     
      validateAuthority: false,
      consentScopes:
      [
        'https://xxxx.onmicrosoft.com/childcare/user_impersonation'
      ]

以下是登录方法。

public login(): void {
    this.authService.loginPopup (['https://XXX.onmicrosoft.com/childcare/user_impersonation']);
}

我能够获取令牌,但它对访问 childcare.webapi 无效。它返回给我 404。当我仔细检查令牌时,它缺少user_impersonation范围。

关于缺少对新 b2clogin.com 域的支持存在一个未解决的问题。但是一位用户 (Sakta) 评论说我们可以将 MSAL.js 库与 b2clogin.com 域一起使用。但这对我也不起作用。

任何指针?

更新 1 看起来角度 MSAL 库没有id_token返回access token

4

0 回答 0