Autenticação asp .net core através do IdentityServer4

Não haverá nada incomum aqui, uma estrutura do IdentityServer4 será autenticada com um nome de usuário e senha em uma determinada API, além de manipular refresh_token.

Ele funcionará com o IdentityDbContext existente, IdentityUser.

O resultado será um cenário no qual, para cada autenticação, um refresh_token será emitido e armazenado na tabela PersistedGrants. Este é um dos quatro tipos de permissões do OAuth 2.0:

Credenciais de senha do proprietário do recurso: usadas por aplicativos confiáveis, como aplicativos que fazem parte do próprio serviço.

Todo o trabalho de manutenção de token é realizado pela estrutura.

Então, vamos começar.

Para especificar o método de resolução, "clientes" estão definidos, terei um:

DataLayer.Config

new Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, //   RequireClientSecret = false, //Client Secret    ,  AllowedScopes = { _configurationManager.Value.ApiName, IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile},//      /connect/userinfo AllowOfflineAccess = true // - } 

Em seguida, esse cliente está sentado no banco de dados quando é criado:

TestIdentityServer.Program

 services.GetRequiredService<DbInitializer>().Initialize(); 

No método "Initialize", o código foi adicionado para criar os bancos de dados necessários e inserir dados, incluindo o cliente. Mas antes disso, é necessário executar a migração, porque você precisará criar um banco de dados de 3 contextos, onde o primeiro contexto é IdentityDbContext ApplicationUser e o restante para IdentityServer4:

DataLayer.DbInitializer

  _context.Database.Migrate(); _configurationDbContext.Database.Migrate(); _persistedGrantDbContext.Database.Migrate(); 

  if (!_configurationDbContext.Clients.Any()) { foreach (var client in _config.GetClients().ToList()) { _configurationDbContext.Clients.Add(client.ToEntity()); } _configurationDbContext.SaveChanges(); } 

Migrações:

 dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb dotnet ef migrations add InitialAuthMigration -c AuthContext -o Data/Migrations/IdentityServer/Auth 

Um link para o código estará no final.

Vá em frente. Após definir o cliente e criar o banco de dados, o servidor já pode processar solicitações "/ connect / token" efetuando login com uma senha e emitindo access_token com refresh_token.
De acordo com ele, com a indicação refresh_token, atualize-os.

Nome de usuário Senha:

imagem

refresh_token

imagem

/ connect / userinfo

imagem

Agora adicione uma API que será autorizada pelo IdentityServer4. Sua conexão com ele será a seguinte:

DataApi.Startup

  services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority; //  http://localhost:5000 options.RequireHttpsMetadata = false; options.ApiName = settings.ApiName;//api1 }); 

A própria API será implantada em outra porta.

Agora, a autorização será verificada normalmente com o atributo "[Autorizar]".

/ api / Padrão

imagem



Isso é tudo, escreva quem pensa o que ou o que está faltando.

Link para o código .

UPD: tokens jwt de assinatura

Métodos de assinatura adicionados: RSA, gerado na inicialização e no arquivo de certificado * .pfx. O método correspondente pode ser alternado para "appsettings.json", propriedade "SigningCredentialConfig".

Source: https://habr.com/ru/post/pt426289/


All Articles