Es wird nichts Ungewöhnliches geben, ein IdentityServer4-Framework authentifiziert sich mit einem Benutzernamen und einem Kennwort auf einer bestimmten API und behandelt das Aktualisierungs-Token.
Es funktioniert mit dem vorhandenen IdentityDbContext, IdentityUser.
Das Ergebnis ist ein Szenario, in dem für jede Authentifizierung ein refresh_token ausgegeben und in der PersistedGrants-Tabelle gespeichert wird. Dies ist eine von vier Arten von OAuth 2.0-Berechtigungen:
Anmeldeinformationen für das Kennwort des Ressourcenbesitzers: Wird von vertrauenswürdigen Anwendungen verwendet, z. B. von Anwendungen, die Teil des Dienstes selbst sind.Alle Token-Wartungsarbeiten werden vom Framework durchgeführt.
Also fangen wir an.
Um die Auflösungsmethode anzugeben, werden "Clients" festgelegt. Ich habe eine:
DataLayer.Confignew Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
Als Nächstes befindet sich dieser Client beim Erstellen in der Datenbank:
TestIdentityServer.Program services.GetRequiredService<DbInitializer>().Initialize();
Bei der Methode "Initialisieren" wurde Code hinzugefügt, um die erforderlichen Datenbanken zu erstellen und Daten, einschließlich des Clients, einzufügen. Zuvor müssen Sie jedoch die Migration durchführen, da Sie eine Datenbank mit drei Kontexten erstellen müssen, wobei der erste Kontext IdentityDbContext ApplicationUser und der Rest IdentityServer4 ist:
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(); }
Migrationen:
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
Ein Link zum Code befindet sich am Ende.
Mach weiter. Nach dem Festlegen des Clients und dem Erstellen der Datenbank kann der Server bereits Anforderungen "/ connect / token" verarbeiten, indem er sich mit einem Kennwort anmeldet und access_token mit refresh_token ausgibt.
Aktualisieren Sie sie entsprechend mit der Angabe refresh_token.
Login: Passwort:

refresh_token

/ connect / userinfo

Fügen Sie nun eine API hinzu, die von IdentityServer4 autorisiert wird. Seine Verbindung mit ihm wird wie folgt sein:
DataApi.Startup services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority;
Die API selbst wird an einem anderen Port bereitgestellt.
Die Autorisierung wird nun wie gewohnt mit dem Attribut "[Autorisieren]" überprüft.
/ api / Standard

Das ist alles, schreibe, wer denkt was oder was fehlt.
Link zum Code .
UPD: Signatur-JWT-TokenSignaturmethoden hinzugefügt: RSA, das beim Start generiert wird, und * .pfx-Zertifikatdatei. Die entsprechende Methode kann auf "appsettings.json", Eigenschaft "SigningCredentialConfig" umgeschaltet werden.