ASP.NET MVC 2和使用WIF的认证(Windows Identity Foundation)
是否有任何体面的例子可用:
通过WIF SDK ,有一些使用WIF与ASP.NET一起使用WSFederationAuthenticationModule (FAM)
重定向到用户用于验证的安全令牌服务(STS)之上的ASP.NET站点瘦皮肤的示例(通过提供用户名和密码)。
如果我能正确理解WIF和基于声明的访问,我希望我的应用程序能够提供自己的登录屏幕,让用户在其中提供用户名和密码,并让此代理人到STS进行身份验证,通过安全标准将登录详细信息发送到端点(WS- *),并期望返回SAML令牌。 理想情况下, SessionAuthenticationModule
将按照使用FAM
与SessionAuthenticationModule
一起使用的示例进行工作,即负责从会话安全分块cookie重建IClaimsPrincipal
,并在安全会话到期时重定向到我的应用程序登录页面。
我所描述的可能使用FAM
和SessionAuthenticationModule
以及相应的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)