No habrá nada inusual, un marco IdentityServer4 se autenticará con un nombre de usuario y una contraseña en una determinada Api, además de manejar refresh_token.
Funcionará con el IdentityDbContext existente, IdentityUser.
El resultado será un escenario en el que, para cada autenticación, se emitirá un refresh_token y se almacenará en la tabla PersistedGrants. Este es uno de los cuatro tipos de permisos de OAuth 2.0:
Credenciales de contraseña del propietario del recurso: Usado por aplicaciones confiables, como las aplicaciones que forman parte del servicio en sí.Todo el trabajo de mantenimiento de tokens es realizado por el marco.
Entonces comencemos.
Para especificar el método de resolución, se establecen "clientes", tendré uno:
DataLayer.Confignew Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
A continuación, este cliente se asienta en la base de datos cuando se crea:
TestIdentityServer.Program services.GetRequiredService<DbInitializer>().Initialize();
En el método "Inicializar", se ha agregado código para crear las bases de datos necesarias e insertar datos, incluido el cliente. Pero antes de eso, debe realizar la migración, ya que tendrá que crear una base de datos de 3 contextos, donde el primer contexto es IdentityDbContext ApplicationUser y el resto 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(); }
Migraciones:
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
Un enlace al código estará al final.
Adelante Después de configurar el cliente y crear la base de datos, el servidor ya puede procesar las solicitudes "/ connect / token" iniciando sesión con una contraseña y emitiendo access_token con refresh_token.
Según esto, con la indicación refresh_token, actualícelos.
Nombre de usuario Contraseña:

refresh_token

/ connect / userinfo

Ahora agregue una API que será autorizada por IdentityServer4. Su conexión con él será la siguiente:
DataApi.Startup services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority;
La API misma se desplegará en otro puerto.
La autorización ahora se verificará como de costumbre con el atributo "[Autorizar]".
/ api / Predeterminado

Eso es todo, escribe quién piensa qué o qué falta.
Enlace al código .
UPD: tokens de firma jwtMétodos de firma añadidos: RSA que se genera al inicio y archivo de certificado * .pfx. El método correspondiente se puede cambiar a "appsettings.json", propiedad "SigningCredentialConfig".