.Net 核心 2.1 OpenIdConnectProtocolException
.Net Core 2.1 OpenIdConnectProtocolException
我有一个 .Net Core 2.1 应用程序,我正在使用它来尝试测试我在 AWS 中的新 Identity Server 4 部署。
这两个程序在我的本地机器上运行完美,我可以在其中使用 IS4 进行身份验证,并使用我的所有登录信息重定向到我的应用程序。
在我部署的服务器上,情况并非如此,我不确定为什么。
我在我的 IS4 服务器上没有看到任何错误,它看到了我的客户端并验证了请求。
但是,在我的本地机器上,我的项目出现错误:
System.Exception: An error was encountered while handling the remote login. ---> Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException: Message contains error: 'invalid_request', error_description: 'error_description is null', error_uri: 'error_uri is null'.
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RedeemAuthorizationCodeAsync(OpenIdConnectMessage tokenEndpointRequest)
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
在我这样调用之后:
return Challenge(new AuthenticationProperties
{
RedirectUri = "Home/Index"
}, "challenge");
本地程序启动是:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookie";
options.DefaultChallengeScheme = "challenge";
//options.DefaultSignInScheme = IdentityServerConstants.DefaultCookieAuthenticationScheme;
//options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie("Cookie")
.AddOpenIdConnect("challenge", options =>
{
options.Authority = "http://auth.is4server.com";
//options.Authority = "http://localhost:5000";
options.SignInScheme = "Cookie";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("offline_access");
options.Scope.Add("profile");
options.Scope.Add("accunet");
});
它看起来像是重定向到 IS4 登录页面,然后立即尝试重定向回我的 redirectUri,它是 localhost:5002/signin-oidc
并带有先前的错误。我已确认我的所有 IS4 配置在我的本地计算机和 AWS 实例上都是相同的。
我不确定为什么这不起作用,尝试重定向到我的本地机器有什么问题吗?错误似乎没有给我很多细节和网络响应。
在这开始发生之前,它至少会让我尝试登录到 IS4 登录页面,然后再将我重定向回我的 signin-oidc。现在它甚至不会进入登录页面,它总是重定向到带有错误的 signin-oidc。我清除了cookies,重启了服务器和本地项目也无济于事。
如有任何帮助,我们将不胜感激。
这个问题与我在 AWS 中的负载均衡器有关。由于 IS4 服务器位于此负载均衡器之后,所有内部流量在 2 个 AWS 远门容器之间进行通信 HTTP
。因此,您需要拥有 HTTP
的权限。
但是,我的 AWS 集群也有一个策略,将所有流量重定向到 HTTPS
,因为每当我调用 options.Authority = "http://auth.is4server.com";
时都会尝试重定向到 "https://auth.is4server.com";
因为它是内部远门,所以不允许。
解决方案正在添加 options.Origin = "https://auth.is4server.com";
因此发现文档具有安全端点并且未尝试重定向。
我有一个 .Net Core 2.1 应用程序,我正在使用它来尝试测试我在 AWS 中的新 Identity Server 4 部署。
这两个程序在我的本地机器上运行完美,我可以在其中使用 IS4 进行身份验证,并使用我的所有登录信息重定向到我的应用程序。
在我部署的服务器上,情况并非如此,我不确定为什么。
我在我的 IS4 服务器上没有看到任何错误,它看到了我的客户端并验证了请求。
但是,在我的本地机器上,我的项目出现错误:
System.Exception: An error was encountered while handling the remote login. ---> Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException: Message contains error: 'invalid_request', error_description: 'error_description is null', error_uri: 'error_uri is null'.
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RedeemAuthorizationCodeAsync(OpenIdConnectMessage tokenEndpointRequest)
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
在我这样调用之后:
return Challenge(new AuthenticationProperties
{
RedirectUri = "Home/Index"
}, "challenge");
本地程序启动是:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookie";
options.DefaultChallengeScheme = "challenge";
//options.DefaultSignInScheme = IdentityServerConstants.DefaultCookieAuthenticationScheme;
//options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie("Cookie")
.AddOpenIdConnect("challenge", options =>
{
options.Authority = "http://auth.is4server.com";
//options.Authority = "http://localhost:5000";
options.SignInScheme = "Cookie";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("offline_access");
options.Scope.Add("profile");
options.Scope.Add("accunet");
});
它看起来像是重定向到 IS4 登录页面,然后立即尝试重定向回我的 redirectUri,它是 localhost:5002/signin-oidc
并带有先前的错误。我已确认我的所有 IS4 配置在我的本地计算机和 AWS 实例上都是相同的。
我不确定为什么这不起作用,尝试重定向到我的本地机器有什么问题吗?错误似乎没有给我很多细节和网络响应。
在这开始发生之前,它至少会让我尝试登录到 IS4 登录页面,然后再将我重定向回我的 signin-oidc。现在它甚至不会进入登录页面,它总是重定向到带有错误的 signin-oidc。我清除了cookies,重启了服务器和本地项目也无济于事。
如有任何帮助,我们将不胜感激。
这个问题与我在 AWS 中的负载均衡器有关。由于 IS4 服务器位于此负载均衡器之后,所有内部流量在 2 个 AWS 远门容器之间进行通信 HTTP
。因此,您需要拥有 HTTP
的权限。
但是,我的 AWS 集群也有一个策略,将所有流量重定向到 HTTPS
,因为每当我调用 options.Authority = "http://auth.is4server.com";
时都会尝试重定向到 "https://auth.is4server.com";
因为它是内部远门,所以不允许。
解决方案正在添加 options.Origin = "https://auth.is4server.com";
因此发现文档具有安全端点并且未尝试重定向。