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.Confignew Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
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:

refresh_token

/ connect / userinfo

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;
A própria API será implantada em outra porta.
Agora, a autorização será verificada normalmente com o atributo "[Autorizar]".
/ api / Padrão

Isso é tudo, escreva quem pensa o que ou o que está faltando.
Link para o código .
UPD: tokens jwt de assinaturaMé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".