Il n'y aura rien d'inhabituel ici, un framework IdentityServer4 s'authentifiera avec un nom d'utilisateur et un mot de passe sur un certain Api, en plus de gérer refresh_token.
Il fonctionnera avec le IdentityDbContext existant, IdentityUser.
Le résultat sera un scénario dans lequel, pour chaque authentification, un jeton refresh_token sera émis et stocké dans la table PersistedGrants. Il s'agit de l'un des quatre types d'autorisations OAuth 2.0:
Informations d'identification du mot de passe du propriétaire de la ressource: utilisées par les applications de confiance, telles que les applications qui font partie du service lui-même.Tous les travaux de maintenance des jetons sont effectués par le framework.
Commençons donc.
Pour spécifier la méthode de résolution, des "clients" sont définis, j'en aurai un:
DataLayer.Confignew Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
Ensuite, ce client est placé dans la base de données lors de sa création:
TestIdentityServer.Program services.GetRequiredService<DbInitializer>().Initialize();
Dans la méthode «Initialize», du code a été ajouté pour créer les bases de données nécessaires et insérer des données, y compris le client. Mais avant cela, il est nécessaire d'effectuer la migration, car vous devrez créer une base de données de 3 contextes, où le premier contexte est IdentityDbContext ApplicationUser et le reste pour 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(); }
Migrations:
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 lien vers le code sera à la fin.
Allez-y. Après avoir configuré le client et créé la base de données, le serveur peut déjà traiter les demandes "/ connect / token" en se connectant avec un mot de passe et en émettant access_token avec refresh_token.
Selon lui, avec l'indication refresh_token, mettez-les à jour.
Nom d'utilisateur Mot de passe:

refresh_token

/ connect / userinfo

Ajoutez maintenant une API qui sera autorisée par IdentityServer4. Ses liens avec lui seront les suivants:
DataApi.Startup services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority;
L'API elle-même sera déployée sur un autre port.
L'autorisation sera désormais vérifiée comme d'habitude avec l'attribut "[Autoriser]".
/ api / par défaut

C'est tout, écrivez qui pense quoi ou ce qui manque.
Lien vers le code .
UPD: jetons Signature JWTMéthodes de signature ajoutées: RSA qui est généré au démarrage et fichier de certificat * .pfx. La méthode correspondante peut être commutée sur "appsettings.json", propriété "SigningCredentialConfig".