我已经在Azure AD B2C租户(XXXX.onmicrosoft.com)中创建了两个应用程序
postman
)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",
}
使用此访问令牌,我能够成功使用邮递员应用程序调用{{1}}端点。
问题
现在,我想在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