Azure B2C - проверка подписи JWT завершилась неудачно
Я настроил MSAL для получения токенов из Azure AD B2C, настроил dotnet core WebAPI для приема токенов JWT. Указанный WebApi в конечной точке органа:
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(jwtOptions =>
{
string tenant = Configuration["AzureAdB2C:Tenant"], policy = Configuration["AzureAdB2C:Policy"], clientId = Configuration["AzureAdB2C:ClientId"];
jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{tenant}/{policy}/v2.0/";
jwtOptions.Audience = clientId;
jwtOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
};
});
согласно образцам. MSAL настроен на использование той же политики и идентичного идентификатора клиента и получает токен.
MSAL Authority - https://login.microsoftonline.com/tfp/{tenant}.onmicrosoft.com/{policy}/v2.0
,
Однако этот обработчик событий AuthFailed просто возвращаетIDX10501: Signature validation failed. Unable to match keys.
и отчитывает аутентификацию как 401.
Я пошел искать ключи для подписи и kid
маркера не совпадает с ребенком, указанным в конечной точке обнаружения.
https://login.microsoftonline.com/tfp/{tenant}/{policy}/discovery/v2.0/keys
Есть идеи?
1 ответ
Похоже, я не выбрал правильную настройку претензий эмитента. MSAL брал свой токен, используя https://login.microsoftonline.com/{guid}/v2.0
конечная точка, тогда как WebAPI использовал https://login.microsoftonline.com/tfp/{guid}/{policy}/v2.0/
эмитент.
Согласно документации это не совместимая с openid конечная точка, но отлично работает для B2C. Оплачивает, чтобы проверить два разных набора претензий!