Asp.net Core 2 позволяет использовать несколько арендаторов, используя Identity Server 4

У меня IDP (Identity Server 4), размещенный с несколькими привязками: auth.company1.com и auth.company2.com У меня также есть API, защищенный от этого IDP. Поэтому для доступа к API мне нужно получить токен доступа из IDP. Это настроено в классе запуска на уровне API следующим образом:

     services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "https://auth.company1.com/";
                options.RequireHttpsMetadata = true;
                options.ApiName = "atb_api";
            });

Как я могу настроить параметры. Автоматически динамически, чтобы он разрешал полномочия нескольких доменов https://auth.company1.com/ и https://auth.company2.com/ ?

c#,asp.net-core,identityserver4,multi-tenant,

2

Ответов: 1


2

Я решил это.

На уровне защиты API в классе запуска я имею следующую конфигурацию:

services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options =>
        {
            options.Authority = "https://shared-domain-for-every-tenant/";
            options.RequireHttpsMetadata = true;
            options.ApiName = "atb_api";
        });

Магия происходит на уровне IDP (IdentityServer4), при настройке IdentityServer я добавляю параметр «ЭмитентУри» следующим образом:

services.AddIdentityServer(options => {
            options.IssuerUri = "https://shared-domain-for-every-tenant/";
        })..AddDeveloperSigningCredential() ...other configurations ...

Когда я перехожу к https://auth.company1.com/.well-known/openid-configuration, возвращаемый документ выглядит так:

  {
    "issuer": "https://shared-domain-for-every-tenant/",
    "jwks_uri": "https://auth.company1.com/.well-known/openid-configuration/jwks",
    "authorization_endpoint": "https://auth.company1.com/connect/authorize",
    "token_endpoint": "https://auth.company1.com/connect/token",
    "userinfo_endpoint": "https://auth.company1.com/connect/userinfo",
    ...
  }

Обратите внимание, что issure является статическим URL-адресом, тогда как все остальные конечные точки относятся к арендатору, который сделал запрос. Это позволяет API проверять токен доступа, а также иметь разные конечные точки для каждого арендатора (мне нужно это, чтобы показать другой экран входа для каждого из них).

Надеюсь, это поможет кому-то там :)

C #, asp.net-жильный, identityserver4, многопользовательский,
Похожие вопросы