.AspNetCore.相关性。未找到国家财产。未知地点

2024-04-19

我正在使用 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 core 团队建议的,不是以完全相同的方式。请参阅下面的 github 问题链接),但它不起作用。

在回调时,它会发出警告:“.AspNetCore.Correlation。未找到状态属性”然后它失败了(根据下面的 github bug):“RemoteAuthentication 错误:关联失败。"

https://github.com/aspnet/AspNetCore/issues/7501 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;
                      };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.AspNetCore.相关性。未找到国家财产。未知地点 的相关文章

随机推荐