我在 Azure AD B2C 租户 (XXXX.onmicrosoft.com) 中创建了两个应用程序
- 前端 - Angular 7(配置为
postman
) - 后端 - 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