. NET Ядро Core Identity Server c Регистрация и аутентификация клиентских приложений - PullRequest
1 голос
/ 01 апреля 2020

Я создал Identity Server с использованием. NET Core и IdentityServer4, у меня есть набор API, и все вызовы этих API должны проходить проверку подлинности, но эти API могут использоваться сторонними приложениями, поэтому клиенты могут быть динамическими До настоящего времени Например, я обнаружил, что клиенты устанавливаются при запуске статически, как

public void ConfigureServices(IServiceCollection services)
{
   services.AddIdentityServer()
   .AddDeveloperSigningCredential()
   .AddInMemoryApiResources(Config.GetApiResources())
   .AddInMemoryClients(Config.GetClients());
}

public class Config
{
   public static IEnumerable<ApiResource> GetApiResources()
   {
       return new List<ApiResource>
       {
           new ApiResource("resourceApi1", "API Application1")
           new ApiResource("resourceApi2", "API Application2")
       };
   }

   public static IEnumerable<Client> GetClients()
   {
       return new List<Client>
       {
           new Client
           {
               ClientId = "clientApp1",

               // no interactive user, use the clientid/secret for authentication
               AllowedGrantTypes = GrantTypes.ClientCredentials,

               // secret for authentication
               ClientSecrets =
               {
                   new Secret("secret".Sha256())
               },

               AllowedScopes = { "resourceApi1" }
           }
       };
   }
}

. Есть ли способ в реализации IdentityServer для регистрации клиентских приложений и их динамической настройки. Например, если у меня есть API 1. resourceApi1 2. resourceApi2

Каждый сторонний API должен иметь возможность регистрироваться, и мы должны иметь возможность генерировать ClientID и секрет Client для каждого, к каким ресурсам они могут получить доступ, и Identity Server аутентифицирует этот ClientID и Client Secret?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Прежде всего настройте свой IdentityServer с помощью EntityFramework , затем вам нужно немного Apis для добавления Client и ApiResources.

IdentityServer имеет свою собственную реализацию Stores , используя EntityFramework.

Вы можете добавить новый Api для этой цели.

[Route("api/[controller]")]
[ApiController]
[AllowAnonymous]
public class DynamicController : ControllerBase
{
    private readonly ConfigurationDbContext context;

    public DynamicController(ConfigurationDbContext context)
    {
        this.context = context;
    }

    [HttpPost]
    public async Task<ActionResult> AddApiResource(ApiResource apiResource)
    {
        context.ApiResources.Add(apiResource);
        await context.SaveChangesAsync();

        return Ok();
    }

    [HttpPost]
    public async Task<ActionResult> AddClient(Client client)
    {
        context.Clients.Add(client);
        await context.SaveChangesAsync();

        return Ok();
    }
}
0 голосов
/ 01 апреля 2020

Существует возможность использовать клиентский магазин. По умолчанию сервер идентификации использует хранилище памяти для поиска клиентов:

services.AddIdentityServer()
    .AddInMemoryClients(Clients)

Вы можете изменить это и зарегистрировать свое собственное хранилище клиентов

services.AddIdentityServer()
    .AddClientStore<MyClientStore>()

и внедрить услугу

class MyClientStore : IClientStore
{
    public Task<Client> FindClientByIdAsync(string clientId)
    {

    }
}

Это решило бы динамический поиск клиентов. Для регистрации клиентов и управления ими вам необходимо реализовать собственную инфраструктуру.

...