【问题标题】:.Net Core 2.1 OpenIdConnectProtocolException.Net Core 2.1 OpenIdConnectProtocolException
【发布时间】:2019-08-03 07:44:18
【问题描述】:

我有一个 .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 并出现错误。我已清除 cookie 并重新启动服务器和本地项目无济于事。

任何帮助将不胜感激。

【问题讨论】:

  • 你找到答案了吗?

标签: identityserver4 openid-connect asp.net-core-2.1


【解决方案1】:

问题与我在 AWS 中的负载均衡器有关。由于 IS4 服务器位于此负载均衡器后面,所有内部流量在 2 个 AWS 远门容器之间进行通信 HTTP。因此,您需要将您的权限设置为HTTP

但是,我的 AWS 集群上也有一个策略,将所有流量重定向到 HTTPS,因为每当我调用 options.Authority = "http://auth.is4server.com"; 时,它都会尝试重定向到 "https://auth.is4server.com";,因为它是内部 Far Gate,所以它确实如此不允许。

解决方案是添加options.Origin = "https://auth.is4server.com";,因此发现文档具有安全端点并且没有尝试重定向。

【讨论】:

  • 由于 options.Origin 现在在 ASP.NET Core 3.1 中不可用,请问您是如何解决的?
猜你喜欢
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多