Установить заявку после входа в систему с помощью IdentityServer в другом программном обеспечении - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть два программного обеспечения, и я хотел бы интегрировать в один identityserver.оба программного обеспечения являются мультитенантными и используют общую базу данных

. Во всех таблицах есть столбец с именем TenantId и в моем фильтре DbContext (EF Core) I Where(x => x.TenantId == TenantId).В настоящее время я сохраняю этот TenantId в заявке и использую простое решение для генерации JWT

. В поисках Google я видел, что один из способов добавить заявку в access_token - через ProfileService, но моя проблема в том, что вВ каждом программном обеспечении у пользователя могут быть разные TenantId

В этом вопросе, который они используют OnTokenValidated для добавления новых утверждений

Но мне интересно, кто возвращает acess_token для программного обеспечения?API или IdentityServer, потому что в этом случае вам нужно быть API для добавления новых утверждений

Сводка: я хочу, чтобы identityserver только входил в систему и генерировал токен, авторизация и другие логики будут непосредственно в каждом изпрограммное обеспечение

1 Ответ

0 голосов
/ 21 сентября 2018

В добавленной вами ссылке вы видите, что access_token на самом деле не изменен.То, что происходит, - то, что требования от access_token сопоставлены с User.Identity.И в OnTokenValidated к этому User.Identity добавляются дополнительные утверждения.

Проблема в том, что tenantid не подходит в качестве утверждения, поскольку IdentityClaims должен моделировать Identity, которая не зависит от контекста, а что-топоскольку tenantid's зависит от контекста.

Для ресурса, который вы не можете использовать OnTokenValidated.Вместо этого используйте промежуточное программное обеспечение.Я предлагаю вам взглянуть на решение команды IdentityServer: PolicyServer .

Короче говоря, после аутентификации (IdentityServer) policyserver добавляет претензии к User.Identity на основе настроенногоавторизация.

В API есть две части (= ресурс):

  1. Расширение User.Identity с заявками на авторизацию
  2. Политики, так как здесь логикадолжно произойти.

И тогда у вас будет то, что вы хотите.Ресурсная авторизация.

PolicyServer использует файл настроек json, но вы можете расширить его с помощью своего собственного хранилища.В примере отсутствуют обычные утверждения, но вы можете расширить модель Политики утверждениями:

// Just the lines to include claims.
public class Policy
{
    public List<Claim> Claims { get; internal set; } = new List<Claim>();

    internal Task<PolicyResult> EvaluateAsync(ClaimsPrincipal user)
    {
        var claims = Claims.Select(x => new Claim { Name = x.Name, Value = x.Value }).ToArray();

        var result = new PolicyResult()
        {
            Claims = claims
        };
    }
}

и в конфигурации:

"Policy": {
  "claims": [
    {
      "name": "tenantid",
      "value": "44"
    }
  ],
  "roles": [

В промежуточном программном обеспечении добавить утверждения для Пользователя.Идентификационные данные, например:

id.AddClaims(claims);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...