2012-10-16 62 views
3

这是一个经典的例子,信息太多=太多的混乱。 我有一个ASP.NET Web应用程序使用通常的POST表单身份验证,并希望实施SSO。 由于我们是微软商店,我们将使用ADFS 2.0。为了实现SSO,我知道我还需要WIF来处理SAML请求? 我是否将WIF安装在与ADFS相同的服务器下?ADFS 2.0,SSO和SAML 2.0

我仍然想要重定向失败的SSO请求或非SSO请求来使用表单,我该如何处理?

有人可以描述流程吗?

谢谢!

回答

1

因此,您正在使用SAML到一些第三方STS?

WIF(开箱即用)不支持SAML。

这里有一个WIF SAML扩展,但这只是CTP(社区技术预览版)。

WIF与您的ASP.NET应用程序集成在一起。对于.NET 4及更低版本,有一个单独的下载。对于.NET 4.5,它是集成的。

WIF只是您的应用程序中的一组.NET类。

您可以使用名为FedUtil的工具(它是WIF SDK下载的一部分)将WIF与ASP.NET应用程序集成。 (由VS中的“添加STS”调用)。

ADFS安装会在服务器上安装WIF,但这与您的应用程序是分开的。

的流程为:

.NET应用程序 - >(WIF) - >(WS联盟) - > ADFS - >(SAML) - > STS

+0

正确,我们的Web应用程序正在被客户端访问,所以我很清楚 - WIF将处理Web应用程序内的SAML,并且ADFS只是在那里重定向有效的SSO请求? –

+0

否 - WIF不处理SAML - ADFS将WIF WS-联合消息转换为SAML并发送给STS。 – nzpcmad

+0

因此,使用此示例: http://technet.microsoft.com/en-us/library/adfs2-federation-wif-application-step-by-ste-p-guide(v=ws.10).aspx 我看到只有'成功'的场景,我在哪里以及如何处理'失败'的场景 - 即SAML没有通过认证。 –

2

ADFS支持两个协议的认证。 1)WS联盟协议 2)的Web SSO SAML协议

* 在WS联合方案 * 对于SSO您的应用程序和ADFS(建立信任关系)之间。

1) Install ADFS & WIF on one server , Create some users in AD. 

2) Generate Federation Metadata.xml file in ADFS, save it one place for 
future need. 

3) Use Windows Azure Access Control Service(ACS) for 
simplicity. (It will do all heavy lifting of your authentication 
process of token coming from ADFS) 

4) Generate Federation 
Metadata.xml file in ACS and Import in your ADFS server as relying 
party. (give some claims as well) 

[http://blogs.msdn.com/b/card/archive/2010/06/25/using-federation-metadata-to-establish-a-relying-party-trust-in-广告-FS-2-0.aspx?重定向=真正的] [1]

5) Import federation metadata.xml 
file from ADFS server to ACS and Add it as Identity provider. (add 
claim processing rule) 

6) Now in your web Application use WIF 
FedUtil Tool and import ACS federation metadata.xml file. 

就是这样..你是好去..

对于Web SSO SAML协议,你所要做的工作手册的编码。

用例:

  1. 用户将达到您的应用程序。

  2. 用户未通过身份验证,因此他将转到ACS并且ACS将其重定向到ADFS登录页面。

  3. 用户输入凭证。 ADFS向ACS发出令牌声明令牌。 ACS将 转换传入的ADFS索赔并将其提供给您的应用程序。

  4. 您的应用程序现在已通过身份验证,因此您可以使用声明并执行 授权内容。

您可以使用URL方案以检查这个请求应该去你的窗体身份验证或ADFS身份验证。 例如。 :http://somedomain.com/formshttp://somedomain.com/ADFS