c# - .AspNetCore.相关性。未找到国家属性(property)。未知位置

标签 c# asp.net-core asp.net-identity asp.net-core-2.1 asp.net-core-security

我正在使用 OIDC 的混合身份验证流程。

options.Events.OnRedirectToIdentityProvider = redirectContext =>
                      {
                          if (redirectContext.Request.Path.StartsWithSegments("/api"))
                          {
                              if (redirectContext.Response.StatusCode == (int)HttpStatusCode.OK)
                              {
                                  AuthenticationProperties  properties = new AuthenticationProperties();
                                  properties.RedirectUri = redirectContext.ProtocolMessage.RedirectUri;
                                  redirectContext.ProtocolMessage.State = options.StateDataFormat.Protect(properties);
                                  redirectContext.Response.StatusCode =   (int)HttpStatusCode.Unauthorized;
                                  redirectContext.Response.Headers["Location"] = redirectContext.ProtocolMessage.CreateAuthenticationRequestUrl();
                              }
                              redirectContext.HandleResponse();
                          }
                          return Task.CompletedTask;
                      };

在上面的代码中,我手动设置了“state”属性(这是 ASP.Net 核心团队建议的,方式不完全相同。请参阅下面的 github 问题链接),但它不起作用。

在回调时,它发出警告作为 ".AspNetCore.Correlation.state property not found" 然后它失败(根据下面的 github 错误)作为 "RemoteAuthentication 错误:关联失败..

https://github.com/aspnet/AspNetCore/issues/7501

那我做错了什么。因为在上面的错误中给出的建议是不可能的,因为它有一些我在这个事件中没有的值。

我缺少什么(或必须做什么才能完成此流程)?

最佳答案

状态可以设置如下。 (必须通过相关的不同属性才能找到。)

options.Events.OnRedirectToIdentityProvider = redirectContext =>
                      {
                          if (redirectContext.Request.Path.StartsWithSegments("/api"))
                          {
                              if (redirectContext.Response.StatusCode == (int)HttpStatusCode.OK)
                              {
                                  redirectContext.ProtocolMessage.State = options.StateDataFormat.Protect(redirectContext.Properties);
                                  redirectContext.Response.StatusCode =   (int)HttpStatusCode.Unauthorized;
                                  redirectContext.Response.Headers["Location"] = redirectContext.ProtocolMessage.CreateAuthenticationRequestUrl();
                              }
                              redirectContext.HandleResponse();
                          }
                          return Task.CompletedTask;
                      };

关于c# - .AspNetCore.相关性。未找到国家属性(property)。未知位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714529/

相关文章:

c# - EntityFramework Core 1.1.1 - 用新值和覆盖值替换旧集合

c# - 验证消息颜色 ASP.NET MVC 4

c# - 使用一个委托(delegate)引用多个方法

c# - css 不透明度到 argb

asp.net - 使用 Active Directory 进行身份验证并使用 ASP.NET Identity 进行角色

c# - 满足 ASP.NET Core 中的 UserManager 依赖项需要什么要求?

c# - ASP Identity GetExternalLoginInfoAsync 总是返回 null

c# wpf - 不能同时设置 DisplayMemberPath 和 ItemTemplate

asp.net - 已导入多个具有相同标识的程序集 : '<in-memory assembly>' and '<in-memory assembly>'

c# - Asp .net core webapi 记录到 Dev 中的文件,一旦部署在 azure 中就写入应用程序洞察