.net RESTful API-авторизация для реагирования на запросы приложений с использованием маркера доступа Active Directory - PullRequest
0 голосов
/ 10 мая 2019

У меня есть приложение 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, тот же случай.

...