c# - WIF 和子域

标签 c# .net subdomain single-sign-on wif

我们有一个现有的 ASP.NET 应用程序 (WebForms),它使用自行开发的身份验证。我们的任务是实现单点登录解决方案,并选择使用 WIF。

我们有一个正在运行的应用程序实例,我们通过使用子域(例如 client1.ourapp.com、client2.ourapp.com 等)来识别客户端。在应用程序代码中,我们去掉了第一个子域,它标识了客户端。

我们一直在使用 WIF 概念验证来弄清楚如何在用户通过身份验证后将其重定向回正确的子域。开箱即用的行为似乎是 STS 将用户重定向到配置文件中标识的任何领域。以下是 PoC 配置文件。我正在使用我的主机文件伪造不同的客户端(即 127.0.0.1 client1.ourapp.com、127.0.0.1 client2.ourapp.com)。

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

显然这是行不通的,因为我们无法将所有人重定向到同一个子域。

我们认为我们已经想出如何处理这个问题,但想听听外界的意见,看看我们是在以正确的方式做这件事,还是我们只是走运。

我们为 FAM 的 RedirectingToIdentityProvider 事件创建了一个事件处理程序。在其中,我们从请求 URL 中获取公司名称,使用公司名称构建一个领域字符串,设置 SignInRequestMessage 的领域和 HomeRealm,然后让 FAM 做它的事情(即将我们重定向到 STS 进行身份验证)。

protected void WSFederationAuthenticationModule_RedirectingToIdentityProvider( object sender, RedirectingToIdentityProviderEventArgs e )
{
    // this method parses the HTTP_HOST and gets the first subdomain
    var companyName = GetCompanyName();
    var realm = GetRealm( companyName );

    e.SignInRequestMessage.Realm = realm;
    e.SignInRequestMessage.HomeRealm = companyName;
}

string GetRealm( string companyName )
{
    return String.Format( "http://{0}.ourapp.com/SSOPOCSite/", companyName );
}

这看起来是解决问题的合理方法吗?

我们可能会因此遇到任何问题吗?

有没有更好的方法?

最佳答案

您的解决方案听起来不错(明确传递您需要的信息),想到的唯一其他解决方案是使用 Request.UrlReferrer 确定用户来自哪个子域。

关于c# - WIF 和子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319597/

相关文章:

c# - .Net Web 客户端在从 S3 下载 2 GB 后失败

node.js - 如何将 .NET 运行时加载为 Node.js 模块?

c# - 通过 .net 客户端通过 SSL 连接到 IBM MQ

c# - 对包含透明元素的自定义 FrameworkElement 的整个区域进行 HitTest

c# - Xamarin Forms 模态导航导致异常

c# - 身份用户的数据库定义 - dbo.AspNetUsers 和 dbo.Users

c# - 将 IEnumerable<Task<T>> 转换为 IObservable<T>

根目录中的 Wordpress htaccess 覆盖子域中的 htaccess。子域应用程序现在不工作

elixir - 如何修复 'Could not check origin for Phoenix.Socket transport'错误? ( Phoenix 1.2.1)

asp.net - azure 中的动态子域