Как проверить подлинность пользователей в Azure Active Directory с динамическими арендаторами в одном экземпляре веб-приложения .NET Core? - PullRequest
5 голосов
/ 12 апреля 2019

Я создал веб-приложение .NET Core 2.1.После этого это приложение было интегрировано с Azure Active Directory (Microsoft.AspNetCore.Authentication.AzureAD).Внутри моего активного каталога есть несколько арендаторов, и для аутентификации пользователя необходимо предоставить идентификатор клиента AD, идентификатор клиента приложения AD.

Есть ли способ использовать всех арендаторов для аутентификации внутри моегоActive Directory?

public class Startup
{
     // Generated code

     public void ConfigureServices(IServiceCollection services)
     {
          services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                  .AddAzureAD(options => 
                              Configuration.Bind("AzureAd", options));

          services.Configure<OpenIdConnectOptions> 
                   (AzureADDefaults.OpenIdScheme, options =>
          {
               // OnTicketReceived, OnAuthenticationFailed, OnTokenValidated
          })
     }

     // Generated code
}

Это мой appsettings.json файл:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "Domain": "some-domain.com",
    "TenantId": "1a10b000-*******",
    "ClientId": "15a0421d-*******",
    "CallbackPath": "/signin-oidc"
  }
}

1 Ответ

0 голосов
/ 15 апреля 2019

Для мультитенантного приложения приложение не знает, из какого арендатора находится пользователь, поэтому мы не можем отправлять запросы конечной точке арендатора.Чтобы получить токен от AD, все запросы будут отправлены в / общую конечную точку (https://login.microsoftonline.com/common)

, когда Azure AD получит запрос на / общую конечную точку, он зарегистрирует пользователя и обнаружит, какой арендаторпользователь из. Конечная точка / common не соответствует арендатору и не является эмитентом. Когда мы проверяем значение эмитента в метаданных для / common, вместо фактического значения используется шаблонный URL: Issuer: https://sts.windows.net/tenantid/

Таким образом, мультитенантное приложение не может проверять токены, просто сопоставляя значение эмитента в метаданных со значением эмитента в токене. Мультитенантному приложению нужна логика, чтобы определить, какие значения эмитента являются действительными икоторые не основаны на части идентификатора арендатора от значения эмитента.

Например, если мультитенантное приложение разрешает вход только от определенных арендаторов, которые подписались на их обслуживание, то оно должно проверить либозначение эмитента или значение претензии tenantid в токене, чтобы убедиться, что арендатор находится вСписок подписчиков.

Пожалуйста, ознакомьтесь с приведенной ниже документацией для получения дополнительной информации об аутентификации пользователей в мультитенанте. Преобразование приложения в мультитенант и Пример Github для аутентификации пользователя в мультитенанте

Надеюсь, это поможет.

...