У меня есть приложение React, использующее MSAL для входа в систему с помощью Azure Active Directory, когда пользователь, входящий в систему MSAL, возвращает IDToken и AccessToken.
У меня есть RESTfull API, использующий ASP NetCore MVC, я хочу реализовать промежуточное программное обеспечение, которое возвращает данные, только когда AccessToken находится в заголовке аутентификации как Bearer.
Где я могу найти четкие документы, какие библиотеки мне следует использовать?
Я не могу найти четкий способ сделать это в документах Azure, только если я запускаю веб-приложение asp, я хочу, чтобы API и интерфейс были отделены друг от друга.
Я уже пробовал использовать
Microsoft.AspNetCore.Authentication;
но возвращает 401 с помощью токена доступа
Это мое текущее промежуточное ПО, которое не работает с токеном ADAccess:
services.AddMvc(o => {
// Requires authentication across the API
o.Filters.Add(new AuthorizeFilter(Policies.Default));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthorization(o => {
o.AddPolicy(Policies.Default, policy => {
policy.RequireAuthenticatedUser();
});
o.AddPolicy(Policies.ReadTodoItems, policy => {
policy.RequirePermissions(delegated: new[] { Scopes.TodosRead, Scopes.TodosReadWrite },
application: new[] { AppRoles.TodosRead, AppRoles.TodosReadWrite });
});
o.AddPolicy(Policies.WriteTodoItems, policy => {
policy.RequirePermissions(delegated: new[] { Scopes.TodosReadWrite }, application: new[] { AppRoles.TodosReadWrite });
});
});
services.AddAuthentication(o => {
o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o => {
o.Authority = Configuration["Authentication:Authority"];
o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters {
ValidAudiences = new List<string>
{
Configuration["Authentication:AppIdUri"],
Configuration["Authentication:ClientId"]
}
};
});
services.AddSingleton<IClaimsTransformation, AzureAdScopeClaimTransformation>();
Я ожидаю получить 200 по моему API-запросу, используя мой токен доступа на предъявителя, но он всегда возвращает 401: не авторизован
MSAL-код для получения токена доступа в приложении React
import { UserAgentApplication } from 'msal'
const applicationConfig = {
clientID: "your-client-id",
authority: "your-authority-uri",
graphScopes: ["scope"]
};
const Msal = new UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, null, { storeAuthStateInCookie: false })
export default async () => {
// token request
await Msal.loginPopup(applicationConfig.graphScopes)
const accessToken = await Msal.acquireTokenSilent(applicationConfig.graphScopes)
}
Я тоже пытался использовать ADAL, тот же случай.