Описание к ошибке: AADSTS90014 MissingRequiredField - This error code may appear in various cases when an expected field is not present in the credential.
Источник: Коды ошибок аутентификации и авторизации .
Поле aud
предназначено для аудитории токена. И вам нужно, чтобы этот токен был предназначен для бэкэнда, на который вы его отправляете.
Взято из Введение в JSON Web Token :
Зарегистрированные претензии - Это набор предопределенных претензий, которые не являются обязательными, но рекомендуются для предоставления набора полезных, совместимых претензий. Некоторые из них: iss (эмитент), exp (срок действия), sub (субъект), aud (аудитория) и другие.
Взято из RFC 7519 - Раздел 4.1 :
Заявка "aud" (аудитория) определяет получателей, для которых JWT. Каждый принципал, предназначенный для обработки JWT, ДОЛЖЕН идентифицировать себя со значением в требовании аудитории. Если принципал, обрабатывающий претензию, не идентифицирует себя со значением в претензии "aud", когда эта претензия присутствует, то JWT ДОЛЖЕН быть отклонен. В общем случае значение "aud" - это массив строк, чувствительных к регистру, каждая из которых содержит значение StringOrURI. В особом случае, когда JWT имеет одну аудиторию, значение «aud» МОЖЕТ быть единственной чувствительной к регистру строкой, содержащей значение StringOrURI. Интерпретация ценностей аудитории, как правило, зависит от конкретного приложения. Использование этого требования НЕОБЯЗАТЕЛЬНО.
При настройке аутентификации Azure Active Directory в бэкэнде ASP.NET вы указываете аудиторию. В нашем случае код выглядит примерно так:
services.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = Authority;
options.Audience = ClientId;
options.TokenValidationParameters = new TokenValidationParameters
{
SaveSigninToken = true
};
});
Где Authority
было свойством, содержащим AAD Instance
+ наше TenantID
, а ClientID
было ClientID
приложения в Azure Active Directory.
При настройке MSAL для взаимодействия с аутентифицированным бэкэндом это выглядит примерно так:
MsalModule.forRoot({
authority: 'https://login.microsoftonline.com/<TENANT>.onmicrosoft.com',
clientID: '<CLIENT_ID_GUID>',
protectedResourceMap: protectedResourceMap
})
Где protectedResourceMap
содержит карту URL-адреса API и необходимые области действия.