MSAL访问令牌没有声明-V2.0端点B2C

时间:2019-06-08 02:47:34

标签: angular azure-ad-b2c msal msal.js

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

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

enter image description here

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范围的访问权限

enter image description here

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

enter image description here

到目前为止,一切都很好。我回来了,访问令牌的作用域为“ 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",      
}

使用此访问令牌,我能够成功使用邮递员应用程序调用{​​{1}}端点。

enter image description here

问题

现在,我想在Angular 6应用程序中获取相同的访问令牌。我正在使用流行的图书馆childcare.api

下面是我的MsalModule配置。

"@azure/msal-angular": "^0.1.2"

和下面是登录方法。

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'
      ]

我能够抢到这个通行证,但是它对于访问childcare.webapi无效。 它返回了404。当我仔细检查令牌时,丢失了public login(): void { this.authService.loginPopup (['https://XXX.onmicrosoft.com/childcare/user_impersonation']); } 范围。

open issue关于缺少对新b2clogin.com域的支持。但是一位用户(Sakta)表示,我们可以将MSAL.js库与b2clogin.com域一起使用。但这对我也不起作用。

有指针吗?

更新1 似乎角度MSAL库返回user_impersonation而不是id_token

0 个答案:

没有答案