Я создал два приложения в моем клиенте Azure AD B2C (XXXX.onmicrosoft.com)
- Внешний интерфейс - Angular 7 (настроен как
postman
) - Backend -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
scopes
Затем я отредактировал политику '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