【问题标题】:WIF cross-domain on one IIS site, dynamically setting of realm一个IIS站点上的WIF跨域,动态设置领域
【发布时间】:2011-05-10 16:02:38
【问题描述】:

我们有很多域在一个 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 设置了错误的领域。

这里会发生什么?

如果这不是为每个用户实例设置领域的方法,还有其他方法吗?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-2 wif


    【解决方案1】:

    我已经解决了这个问题。

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

    我将 mvc 项目设置为使用表单身份验证,尽管我不这样做。 我这样做是为了每次运行带有 [Authorize] 的控制器时,我都会通过返回 url 重定向到我的登录控制器。

    在我的登录控制器中我这样做

    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 在文档和微软技术方面都落后了,没有 MVC 的示例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2011-05-26
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多