gpt4 book ai didi

asp.net - 一个IIS站点WIF跨域,动态设置realm

转载 作者:行者123 更新时间:2023-12-02 21:12:17 25 4
gpt4 key购买 nike

我们有很多域在一个 IIS 网站/应用程序池上运行。目前,我们正在使用 Windows Identity Foundation 实现 SSO。

在 web.config 中,必须设置领域

<wsFederation passiveRedirectEnabled="true" issuer="http://issuer.com" realm="http://realm.com" requireHttps="false" />

我的问题是领域取决于用户访问网站的域所以我所做的就是将其设置在像这样的全局操作过滤器中

var module = context.HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule;
module.Realm = "http://" + siteInfo.DomainName;

我的问题是。当我像这样设置领域时,是否为每个用户实例设置或应用程序实例。

场景。

用户 A 加载页面并将领域设置为domain.a.com。

用户 B 已登录 domain.b.com 并按下登录按钮。

由于用户 A 在用户 B 按下登录之前加载了页面,因此用户 A 将点击 STS领域设置错误。

这里会发生什么?

如果这不是为每个用户实例设置领域的方法,是否还有其他方法可以做到这一点?

最佳答案

我已经解决了这个问题。

我在 web.config 中将 PassiveRedirectEnabled 设置为 false

我将 mvc 项目设置为使用表单例份验证,尽管我没有这样做。我这样做是为了每次运行带有 [Authorize] 的 Controller 时,我都会被重定向到带有返回 URL 的登录 Controller 。

在我的登录 Controller 中我这样做

var module = HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule;
module.PassiveRedirectEnabled = true;

SignInRequestMessage mess = module.CreateSignInRequest("passive", returnUrl, false);
mess.Realm = "http://" + Request.Url.Host.ToLower();

HttpContext.Response.Redirect(mess.WriteQueryString());

这绝对不应该是这样,对我来说,感觉 Windows Identity Foundation 落后了,无论是在文档还是 Microsoft 技术方面,都没有 MVC 的示例。

对于其他 MVC 人员,我建议他们不要使用 fedutil 向导,而是自己编写代码和配置

关于asp.net - 一个IIS站点WIF跨域,动态设置realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4191951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com