Otentikasi asp .net inti melalui IdentityServer4

Tidak akan ada yang aneh, satu kerangka kerja IdentityServer4 akan mengautentikasi dengan nama pengguna dan kata sandi pada Api tertentu, ditambah menangani refresh_token.

Ini akan bekerja dengan IdentityDbContext, IdentityUser yang ada.

Hasilnya akan menjadi skenario di mana, untuk setiap otentikasi, satu refresh_token akan dikeluarkan dan disimpan di tabel PersistedGrants. Ini adalah salah satu dari empat jenis izin OAuth 2.0:

Kredensial Kata Sandi Pemilik Sumberdaya: Digunakan oleh aplikasi tepercaya, seperti aplikasi yang merupakan bagian dari layanan itu sendiri.

Semua pekerjaan pemeliharaan token dilakukan oleh kerangka kerja.

Jadi mari kita mulai.

Untuk menentukan metode resolusi, "klien" ditetapkan, saya akan memilikinya:

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

Selanjutnya, klien ini duduk di basis data ketika dibuat:

TestIdentityServer.Program

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

Dalam metode "Inisialisasi", kode telah ditambahkan untuk membuat database yang diperlukan dan memasukkan data, termasuk klien. Tetapi sebelum itu, Anda perlu melakukan migrasi, karena Anda harus membuat database dari 3 konteks, di mana konteks pertama adalah IdentityDbContext ApplicationUser, dan sisanya untuk 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(); } 

Migrasi:

 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 

Tautan ke kode akan berada di akhir.

Silakan. Setelah mengatur klien dan membuat basis data, server sudah dapat memproses permintaan "/ hubungkan / token" dengan login dengan kata sandi dan buat masalah access_token dengan refresh_token.
Menurutnya, dengan indikasi refresh_token, perbarui.

Kata Sandi Nama Pengguna:

gambar

refresh_token

gambar

/ hubungkan / userinfo

gambar

Sekarang tambahkan api yang akan diotorisasi oleh IdentityServer4. Hubungannya dengan dia adalah sebagai berikut:

DataApi.Startup

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

Api itu sendiri akan dikerahkan ke port lain.

Otorisasi sekarang akan diperiksa seperti biasa dengan atribut "[Otorisasi]".

/ api / Default

gambar



Itu saja, tulis siapa yang berpikir apa atau apa yang hilang.

Tautan ke kode .

UPD: Tanda tangan jwt tanda tangan

Metode tanda tangan tambahan: RSA yang dihasilkan saat startup dan * .pfx file sertifikat. Metode yang sesuai dapat beralih ke "appsettings.json", properti "SigningCredentialConfig".

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


All Articles