ASP.NET MVC 2和使用WIF的认证(Windows Identity Foundation)

是否有任何体面的例子可用:

通过WIF SDK ,有一些使用WIF与ASP.NET一起使用WSFederationAuthenticationModule (FAM)重定向到用户用于验证的安全令牌服务(STS)之上的ASP.NET站点瘦皮肤的示例(通过提供用户名和密码)。

如果我能正确理解WIF和基于声明的访问,我希望我的应用程序能够提供自己的登录屏幕,让用户在其中提供用户名和密码,并让此代理人到STS进行身份验证,通过安全标准将登录详细信息发送到端点(WS- *),并期望返回SAML令牌。 理想情况下, SessionAuthenticationModule将按照使用FAMSessionAuthenticationModule一起使用的示例进行工作,即负责从会话安全分块cookie重建IClaimsPrincipal ,并在安全会话到期时重定向到我的应用程序登录页面。

我所描述的可能使用FAMSessionAuthenticationModule以及相应的web.config设置,还是我需要考虑自己编写一个HttpModule来处理这个问题? 或者,重定向到一个瘦Web站点STS,用户在被动请求方场景中登录事实上的方法?


WIF + MVC的例子可以在“索赔身份指南”的这一章中找到:

http://msdn.microsoft.com/en-us/library/ff359105.aspx

我建议阅读前几章,了解所有基本原则。 这篇博客文章涵盖了MVC + WIF的具体细节:

http://blogs.msdn.com/b/eugeniop/archive/2010/04/03/wif-and-mvc-how-it-works.aspx

控制登录体验非常好。 你应该只部署你自己的STS(在你的域名中,你的外观和感觉等)。 您的应用程序只需将其用于AuthN(这就是为什么一个应用程序通常被称为“依赖方”)。

该体系结构的优点是authN委托给1个组件(STS),并且不会散布在许多应用程序中。 但其他(巨大的)优势是您可以非常轻松地启用更复杂的场景。 例如,您现在可以与其他组织的身份提供商联合。

希望它能帮助Eugenio

@RisingStar:

令牌(包含声明)可以选择加密(否则它们将以明文形式)。 这就是为什么总是建议SSL浏览器和STS之间的交互。

请注意,即使它们是明文形式,由于令牌是数字签名的,因此篡改是不可能的。


这是你问的一个有趣的问题。 我知道无论出于何种原因,微软在没有太多文档的情况下推出了这个“Windows Identity Foundation”框架。 我知道这一点,因为我负责研究如何将它用于新项目并将其与现有基础设施集成。 我一直在寻找网络好几个月寻找好的信息。

我已经采取了一些不同的角度来解决你所描述的问题。

我使用了现有的登录应用程序,并将Microsoft的WIF管道集成到其中。 因此,我的意思是我有一个用户登录的应用程序。登录应用程序将用户提供的凭据提交给另一台返回用户身份(或指示登录失败)的服务器。

看看微软的一些例子,我看到他们做了以下工作:从查询字符串(由依赖方应用程序生成)构建SignInRequestMessage ,从自定义类构造安全令牌服务,最后使用当前的httpcontext调用FederatedSecurityTokenServiceOperations.ProcessSignInresponse 。响应。 不幸的是,在这里我不能很好地解释它。 你真的需要看代码示例。

我的一些代码与代码示例非常相似。 在GetOutputClaimsIdentity ,你会对实现许多自己的逻辑感兴趣。 这是构建描述登录用户的索赔身份的函数。

现在,我认为你真的有兴趣了解这一点。 这是微软在他们的文档AFAIK中没有告诉你的。

一旦用户登录,它们将被重定向回依赖方应用程序。 无论登录应用程序如何工作,WIF类都会向用户的浏览器发送一个响应,其中包含一个包含令牌签名证书和用户声明的“隐藏”HTML输入。 (索赔将以明文形式)。 在这个回应的最后是一个重定向到你的依赖方网站。 我只知道这个动作,因为我用“Fiddler”

回到依赖方网站后,WIF类将处理响应(在任何代码运行之前)。 证书将被验证。 默认情况下,如果您使用FedUtil.exe设置了信赖方网站(通过单击“在Visual Studio的信赖方应用程序中添加STS参考”),Microsoft的课程将验证证书指纹。

最后,WIF框架在用户的浏览器中设置cookie(根据我的经验,cookie名称以“FedAuth”开始)包含用户声明。 饼干不是人类可读的。

一旦发生这种情况,您可以选择使用ClaimsAuthenticationClass对依赖方网站内的用户声明执行操作。 这是你的代码再次运行的地方。

我知道这与你所描述的不同,但我有这个设置工作。 我希望这有帮助!

PS。 请查看我询问的有关Windows Identity Foundation的其他问题。

更新:在下面的评论中回答问题:

我遗漏的一件事是,重定向到STS登录应用程序是通过使用包含用户登录应用程序的URL的查询字符串的重定向方式发生的。 当用户第一次尝试访问需要验证的页面时,该重定向会自动发生。 另外,我相信你可以用WSFederationAuthentication模块手动重定向。

我从来没有试过这样做,但如果你想在应用程序本身中使用登录页面,我相信框架应该允许你使用以下内容:

1)将STS代码封装在库中。 2)从您的应用程序中引用库。 3)在您的应用程序中创建一个登录页面。 确保这样的页面不需要认证。 4)将web.config的Microsoft.IdentityModel部分中的wsFederation元素的issuer属性设置为登录页面。


你想要做的是一个积极的签名。 WIF包括WSTrustChannel(工厂),它允许您直接与STS通信并获得安全令牌。 如果您希望您的登录表单以这种方式工作,可以按照WIF 4.0 SDK中的“WSTrustChannel”示例进行操作。 获得令牌后,以下代码将获取该令牌并调用WIF处理程序以创建会话令牌并设置相应的Cookie:

public void EstablishAuthSession(GenericXmlSecurityToken genericToken)
{
    var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;            
    var token = handlers.ReadToken(new XmlTextReader(
                                        new StringReader(genericToken.TokenXml.OuterXml)));

    var identity = handlers.ValidateToken(token).First();
    // create session token
    var sessionToken = new SessionSecurityToken(
        ClaimsPrincipal.CreateFromIdentity(identity));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
}

完成此操作后,您的网站应该像发生被动签名一样行事。

链接地址: http://www.djcxy.com/p/12439.html

上一篇: ASP.NET MVC 2 and authentication using WIF (Windows Identity Foundation)

下一篇: 401 response code for json requests with ASP.NET MVC