Pertanyaan Identity Server 4 Running Di balik load Balancer


Saya telah menyiapkan Identity Server 4 untuk proyek saya menggunakan Entity Framework. Saya sudah mengonfigurasi layanan untuk menggunakan Toko hibah tetap dan Sertifikat yang Ditandatangani.

services.AddIdentityServer()
        .AddSigningCredential(Config.GetSigningCertificate())
        .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>()
        .AddProfileService<ProfileService>()
        .AddConfigurationStore(builder =>
                    builder.UseSqlServer(connectionString, options =>
                        options.MigrationsAssembly(migrationsAssembly)))
        .AddOperationalStore(builder =>
                    builder.UseSqlServer(connectionString, options =>
                        options.MigrationsAssembly(migrationsAssembly)));

Berikut adalah konfigurasi layanannya.

Masalahnya adalah ketika saya menjalankan server saya di belakang load balancer dengan contoh 2 contoh identic yang menangani semua permintaan, server di mana pengguna tidak masuk gagal untuk memecahkan kode token JWT, yang menyebabkan 401 kesalahan yang tidak sah.

Saya berasumsi bahwa metode sigining dari token atau enkripsinya adalah masalah, tetapi saya tidak dapat menemukan cara untuk menyelesaikannya.

Berikut sisa konfigurasi saya.

Konfigurasi:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
      Authority = url,
      // Authority = "http://localhost:5000",
      AllowedScopes = { "WebAPI" },
      RequireHttpsMetadata = false,
      AutomaticAuthenticate = true,
      AutomaticChallenge = true,

});

klien:

new Client
{
     ClientId = "Angular2SPA",
     AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, // Resource Owner Password Credential grant.
     AllowAccessTokensViaBrowser = true,
     RequireClientSecret = false, // This client does not need a secret to request tokens from the token endpoint.
     AccessTokenLifetime = 7200, // Lifetime of access token in seconds.
     AllowedScopes = {
                       IdentityServerConstants.StandardScopes.OpenId, // For UserInfo endpoint.
                       IdentityServerConstants.StandardScopes.Profile,
                       "roles",
                       "WebAPI"
                      },
     AllowOfflineAccess = true, // For refresh token.
     AccessTokenType = AccessTokenType.Jwt

}

Saya juga mengimplementasikan IResourceOwnerPasswordValidator dan IProfileService saya sendiri.

Tahu kenapa ini terjadi?


4
2018-05-11 13:01


asal


Jawaban:


Saya memiliki masalah serupa, load balancing Identity Server 4 dan dapat berbagi kunci menggunakan .AddDataProtection () di ConfigureServices of Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
// Other service configurations

  services.AddDataProtection();

// Additional service configurations    
}

Sebagai catatan tambahan, jika Anda mengikuti rute ini, pertimbangkan untuk mengenkripsi kunci tersebut (di mana pun Anda memutuskan untuk menggunakan) menggunakan ekstensi seperti .ProtectKeysWith* (ada beberapa opsi) . Lihat https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction?view=aspnetcore-2.1 untuk informasi lebih lanjut

HTH


0
2017-07-16 16:45