IdentityServer4 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдПрд╕реНрдк .net рдХреЛрд░

рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдПрдХ IdentityServer4 рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд Api рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдореМрдЬреВрджрд╛ IdentityDbContext, IdentityUser рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░реНрд╕реЗрдВрдЯреЗрдЬреЗрдВрдЯреНрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ OAuth 2.0 рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:

рд░рд┐рд╕реЛрд░реНрд╕ рдУрдирд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓: рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕реНрд╡рдпрдВ рд╕реЗрд╡рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред

рд╕рднреА рдЯреЛрдХрди рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рдХрд╛рд░реНрдп рд░реВрдкрд░реЗрдЦрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдХреНрд▓рд╛рдЗрдВрдЯ" рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЛрдЧрд╛:

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 // - } 

рдЕрдЧрд▓рд╛, рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

TestIdentityServer.Program

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

"рдкреНрд░рд╛рд░рдВрднрд┐рдХ" рд╡рд┐рдзрд┐ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╣рд┐рдд рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ 3 рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рд╕рдВрджрд░реНрдн IdentityDbContext ApplicationUser, рдФрд░ рдмрд╛рдХреА 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(); } 

рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж:

 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 

рдХреЛрдб рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЕрдВрдд рдореЗрдВ рд╣реЛрдЧрд╛ред

рдЖрдЧреЗ рдмрдврд╝реЛред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рджреНрд╡рд╛рд░рд╛ "/ рдХрдиреЗрдХреНрдЯ / рдЯреЛрдХрди" рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд░реАрдлреНрд░реЗрд╢_рдЯреЛрдХрди рдХреЗ рд╕рд╛рде access_token рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдВрдХреЗрдд рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрд╛рд╕рд╡рд░реНрдб:

рдЫрд╡рд┐

refresh_token

рдЫрд╡рд┐

/ рдХрдиреЗрдХреНрдЯ / userinfo

рдЫрд╡рд┐

рдЕрдм рдПрдХ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ IdentityServer4 рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХреГрдд рд╣реЛрдЧрд╛ред рдЙрд╕рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рд╕рдВрдмрдВрдз рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

DataApi.Startup

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

рдПрдкрд┐ рд╣реА рджреВрд╕рд░реЗ рдкреЛрд░реНрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдЕрдм "[рдЕрдзрд┐рдХреГрдд]" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред

/ рдПрдкреАрдЖрдИ / рдбрд┐рдлрд╝реЙрд▓реНрдЯ

рдЫрд╡рд┐



рдпрд╣ рд╕рдм рд▓рд┐рдЦреЗрдВ, рдЬреЛ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╛ рдХреНрдпрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИред

рдХреЛрдб рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

UPD: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ jwt рдЯреЛрдХрди

рдЬреЛрдбрд╝реЗ рдЧрдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рддрд░реАрдХреЗ: рдЖрд░рдПрд╕рдП рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдФрд░ * .pfx рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реА рдкрджреНрдзрддрд┐ рдХреЛ "appsettings.json", рд╕рдВрдкрддреНрддрд┐ "SigningCredentialConfig" рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles