ADFS 2.0, SSO and SAML 2.0

3
这是典型的信息过载=混淆过多的例子。 我有一个使用常规POST表单身份验证的ASP.NET Web应用程序,并希望实现SSO。 由于我们是微软商店,我们将使用ADFS 2.0。为了实现SSO,我理解我还需要安装WIF来处理SAML请求? 我要在与ADFS相同的服务器上安装WIF吗?
我仍然希望重定向失败的SSO请求或非SSO请求以使用表单,该如何处理?
请问是否有人可以描述一下整个流程呢?
谢谢!
2个回答

2

ADFS支持两种身份验证协议。 1)WS-Federation协议 2)Web SSO SAML协议

*在WS-Federation场景中* 为了在您的应用程序和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-ad-fs-2-0.aspx?Redirected=true][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


1

所以你在使用 SAML 向第三方 STS 进行身份验证?

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

虽然有一款名为 WIF SAML 扩展,但目前它只是 CTP(社区技术预览版)。

WIF 已经与你的 ASP.NET 应用程序集成。对于 .NET 4 及以下版本,需要单独下载。而对于 .NET 4.5,则已经集成了。

WIF 只是应用程序内部一组 .NET 类。

你可以使用一个名为 FedUtil 的工具将 WIF 与你的 ASP.NET 应用程序集成,该工具包括在 WIF SDK 下载中。(可在 VS 中通过“添加 STS”的方式调用)。

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

流程如下:

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


好的,谢谢。关于同一个问题 - 我在哪里定义查询以验证SQL服务器?我在ADFS 2.0管理器中只看到连接字符串。 - karel lahmy
你需要更具体一些。SQL服务器在哪里发挥作用?这听起来像是一个单独的问题 - 最好开启另一个问题。 - rbrayb
它们在同一“区域”。让我再解释一遍——我有一个网络应用程序在一个服务器上,ADFS 在另一个服务器上。向网络应用程序(SAML)发出包含用户信息的请求,这会被重定向到 ADFS 服务器进行验证,但我不希望这与 AD 进行校验,而是与 SQL Server 进行校验(我将在其中存储用户信息)——我该在哪里建立连接? - karel lahmy
你想要使用AD或SQL Server进行身份验证吗?还是只想在身份验证后从SQL Server获取声明?仅AD可以对AD进行身份验证。如果您想要对SQL Server进行身份验证,请使用https://github.com/thinktecture/Thinktecture.IdentityServer.v1。也有.NET 4的v2版本。如果您只想要声明,请访问http://www.idmcrisis.com/post/2011/11/30/Using-ADFS-20-SQL-Attribute-Store-for-%E2%80%9Cadvanced%E2%80%9D-claims.aspx。 - rbrayb
如果您拥有SAML令牌,则已经通过身份验证。当您使用sp.xml RP元数据配置ADFS时,它会配置一个标识符。只有包含该标识符的SAML请求才会被处理。 - rbrayb
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接