Регистрация AAD для Do tnet core 3.1 и Angular 9 - PullRequest
0 голосов
/ 05 марта 2020

Мне нужно создать простое приложение spa (angular 9) с версией do tnet core 3.1 на задней панели с Azure регистрацией в Active Directory. Есть ли документация или учебное пособие о том, как сделать tnet core + angular + AAD auth simple application?

Я нашел статью AAD с angular, do tnet и MSAL , но на сегодня это не актуально.

Я зарегистрировал две регистрации приложений (как показано в статье) и взял клиентское приложение из образца .

Мой app.module.ts содержит:

function MSALConfigFactory(): Configuration {
  return {
    auth: {
      clientId: '<client-id-of-frontend-app-registration>',
      authority: "https://login.microsoftonline.com/<tenant-id>",
      validateAuthority: true
      // redirectUri: "http://localhost:4200/",
      // postLogoutRedirectUri: "http://localhost:4200/",
      // navigateToLoginRequestUrl: true,
    },
    cache: {
      cacheLocation: "localStorage",
      storeAuthStateInCookie: isIE, // set to true for IE 11
    },
  };
}

После этого я создал бэкэнд-проект с помощью:

dotnet new webapi --client-id <client-id-of-backend-app-registration> --tenant-id <tenant-id> --domain microsoft.onmicrosoft.com --auth SingleOrg

и добавил angular -app в бэкэнд проект, как это было бы с:

dotnet new angular

, поэтому appsettings. json содержит:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/ ",
    "Domain": "microsoft.onmicrosoft.com",
    "TenantId": "<tenant-id>",
    "ClientId": "<client-id-of-backend-app-registration>"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Когда я запускаю проект, я нажимаю «Войти» и все идет нормально и после этого все запросы через введенные HTTPClients содержат токены Bearer.

Но когда я вызываю любой контроллер, помеченный как [Authorize], он всегда возвращает 401.

Так что, возможно, некоторые из шагов содержат ошибки? Или есть документация или учебник, как сделать tnet core + angular + AAD auth простым приложением? По крайней мере, для других версий do tnet и angular, но не слишком старых.

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вы должны получить токен доступа в приложении Angular, чтобы получить доступ к вашему веб-приложению API.

При регистрации веб-приложения API настройте Expose an API и Add a Scope, например: api://<cliendID>/api-access и In. net основное веб-приложение, задав для ClientId значение api://<clientid>. * 1008. *

На Angular стороне приложения вы можете установить consentScopes для включения области действия вашего веб-API:

consentScopes: [ "api://<clientid>/api-access" ]

  • consentScopes: Позволяет клиенту express желаемые области видимости, на которые следует дать согласие. Области могут быть из нескольких ресурсов / конечных точек. Передавая здесь область действия, вы только согласитесь, и токен доступа не будет получен до тех пор, пока клиент на самом деле не вызовет API

и не установит protectedResourceMap для включения области API для получения токена доступа:

  • protectedResourceMap: сопоставление ресурсов с областями {"https://graph.microsoft.com/v1.0/me", ["user.read", "mail.send"]}. Используется внутри MSAL для автоматического подключения токенов в вызовах webApi. Это требуется только для вызовов CORS.

Например: export const protectedResourceMap:[string, string[]][]=[['https://localhost:44388/api/values', ['api://59b02905-8b6b-4665-a702-321e97392416/api-access']] ];

Вы можете проверить MSAL Для Angular документ для получения более подробной информации. И этот пример кода предназначен для Angular 9. Вы можете изменить пример кода, обновив настройки в app.module.ts.

Обновление:

Вы используете Azure AD V2.0, поэтому Администрация должна добавить /v2.0 при проверке токена в веб-интерфейсе:

services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    // This is a Microsoft identity platform web API.
    options.Authority += "/v2.0";

    // The web API accepts as audiences both the Client ID (options.Audience) and api://{ClientID}.
    options.TokenValidationParameters.ValidAudiences = new []
    {
     options.Audience,
     $"api://{options.Audience}"
    };


}); 
0 голосов
/ 18 марта 2020
...