로드 밸런서 뒤에 IdentityServer와 관련된 문제가 있습니다.
직접 ips를 사용하고 있다면 분명히 everEthing이 예상대로 작동합니다.로드 밸런서 "토큰 엔드 포인트에 대한 HTTP 요청이 잘못되었습니다."
현재 2 대의 Linux 컴퓨터에서 호스팅되는 HTTP 도커 엔진으로 리디렉션되는 유효한 인증서가있는 LB에 SSL 구성이 있습니다.
나는 내 클라이언트에 MVC 하이브리드 흐름을 사용하고 있습니다 : 서버 측에
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies",
Authority = settings.Server,
RequireHttpsMetadata = "false",
ClientId = "MyMvcClient",
ClientSecret = "MyMvcSuperPassword",
ResponseType = "code id_token",
GetClaimsFromUserInfoEndpoint = true,
SaveTokens = true,
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = JwtClaimTypes.Name,
RoleClaimType = JwtClaimTypes.Role,
},
Events = new OpenIdConnectEvents()
{
OnRemoteFailure = context =>
{
context.Response.Redirect("/error");
context.HandleResponse();
return Task.FromResult(0);
}
},
"Scope": { "openid", "profile", "email", "myclient", "offline_access" }
});
을, 나는 다음과 같은 설정이 있습니다
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<IdentityDbContext>(builder);
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<IdentityDbContext, Guid>()
.AddUserStore<UserStore<ApplicationUser, ApplicationRole, IdentityDbContext, Guid>>()
.AddRoleStore<RoleStore<ApplicationRole, IdentityDbContext, Guid>>()
.AddUserManager<LdapUserManager>()
.AddSignInManager<LdapSignInManager>()
.AddDefaultTokenProviders()
.AddIdentityServerUserClaimsPrincipalFactory();
...
string redisSettings = $"{redisHost}:{redisPort},ssl={redisSsl},abortConnect={redisAbortConnect},password={redisPassword}";
services.AddDataProtection().PersistKeysToRedis(redis, redisKey);
...
// Adds IdentityServer
services.AddIdentityServer()
.AddSigningCredential(new X509Certificate2("IdentityServerAuth.pfx"))
.AddConfigurationStore(builder)
.AddOperationalStore(builder)
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<IdentityProfileService>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
app.UseIdentity();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
// Adds IdentityServer
app.UseIdentityServer();
}
이미 언급 한 바와 같이를, 그것은 구성 작동 로드 밸런서없이 클라이언트가 오류 "오류 메시지 : 'invalid_request', error_description : 'error_description is null', error_uri : 'error_uri is null'."
그리고
는 서버 측에서 내가 정보를 수신하고 있습니다 : IdentityServer4.Hosting.IdentityServerMiddleware [0] 호출하기 IdentityServer 엔드 포인트 : IdentityServer4.Endpoints.TokenEndpoint/토큰 연결/대한 경고 : IdentityServer4.Endpoints.TokenEndpoint [0] 토큰 엔드 포인트에 대한 유효하지 않은 HTTP 요청
당신이 (HTTPS를 [앞으로 헤더] 가능 했 : //docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction#configure-a-reverse-proxy-server)? SSL 프록시에서 종료되고 있다면 앞으로 무슨 뜻 헤더를 사용하여 – Tseng
을 (JWT 토큰은 HTTP를 통해 안전하지 않기 때문에) 신원/WebApi는 대부분의 경우에 SSL을 필요로 'app.UseForwardedHeaders (새 ForwardedHeadersOptions { ForwardedHeaders의 =의 ForwardedHeaders .XForwardedFor | ForwardedHeaders.XForwardedProto }); ' 그렇다 – Artem