【问题标题】:Secure Token Service using SSO with ADFS2 OR username/password?使用 SSO 和 ADFS2 或用户名/密码的安全令牌服务?
【发布时间】:2014-05-20 18:17:41
【问题描述】:

我目前有一个 MVC4 自主开发的安全令牌服务 (STS),它与我们自己的身份验证数据库进行通信。使用此设置一切正常。作为一项新功能,我需要为域上的用户添加通过 ADFS2 进行单点登录 (SSO) 的功能(绕过当前的 un/pw 屏幕,他们只是“进入”)。需要明确的是,确实需要处理 3 种不同的登录可能性:域用户 (SSO)、域凭据(域用户不在域上输入其域 un/pw)以及来自数据库的原始 un/pw 身份验证。知道我知道如何将 web.config 设置添加到依赖应用程序以连接 STS,我将如何连接两个 wsFederation 被动重定向选项(当前重定向到 STS 用于 un/pw,以及 ADFS 选项)?这是否必须通过 WSFederationAuthenticationModule 等重载类在代码中处理?处理我想要的最好的方法是什么?任何代码示例?感谢您的宝贵时间!

【问题讨论】:

    标签: security asp.net-mvc-4 single-sign-on token ws-federation


    【解决方案1】:

    您的自定义 STS 上只有您的登录屏幕和两个附加按钮,“使用 ADFS 登录”或“以域用户身份登录”。这两个按钮都重定向到与您的 STS 联合的另外两个 STS(您的 STS 扮演身份提供 STS 或依赖 STS 的角色)。

    这不是很复杂。您需要创建两个SignInRequestMessages 并使用他们的WriteQueryString 为两个不同的STS 构建两个url。另一种方法是使用WSFederationAuthenticationModule::CreateSignInRequest 方法。

    http://msdn.microsoft.com/en-us/library/system.identitymodel.services.signinrequestmessage(v=vs.110).aspx

    http://msdn.microsoft.com/en-us/library/system.identitymodel.services.wsfederationauthenticationmodule.createsigninrequest(v=vs.110).aspx

    消费响应比较棘手,因为您需要一个 uri(或两个不同的 uri)来扮演端点角色。在 uri 中,您需要一个令牌接收器并尝试从提供者发送的 SAML 中创建一个令牌。

    如果你看看我曾经写过的wif:FederatedPassiveSignIn方法的社区替换源代码,你就会明白

    http://code.google.com/p/net45federatedpassivesignin/source/browse/trunk/+net45federatedpassivesignin+--username+wzychla@gmail.com/Community.IdentityModel.Web/Controls/CommunityFederatedPassiveSignIn.cs?spec=svn6&r=6

    (至少一半的代码负责 WebForms 用户控制基础设施,但另一半是您要寻找的)

    不幸的是,这种自定义混合场景仅通过联邦模块的配置并不容易处理。

    【讨论】:

    • 非常感谢您的帮助。我正试图让一个 STS 处理所有工作负载,所以让我运行一下,看看我是否在球场上:在我的依赖应用程序中,我目前在 web 配置中有一个 元素。这告诉 RA 去哪里进行身份验证,然后返回哪里。如何动态构建此部分,以便理论上可以将单个 STS 应用于任何网站?这里涉及的内容比我想象的要多吗?
    • 不,你弄错了。 RA 仍会转到单个 STS。但是,STS 可以充当身份提供者 STS(因此它会返回)或依赖 STS(因此它会进一步重定向到另一个 STS)。从应用程序的角度来看,有一个单一身份提供者,即上面提到的 STS。无论它是直接对用户进行身份验证还是向另一个 STS 寻求帮助,从 RP 的角度来看都无关紧要,因为它仍然从相同的来源获得声明,并使用相同的证书签名。我当时描述的是如何拥有一个可能指向多个 Idp-STS 或直接进行身份验证的 R-STS。
    • 好的。当前想法:我需要 ADFS 的应用程序是通过网页上的链接访问的,该网页上有许多指向不同应用程序的链接。此链接将指向一个网站,该网站将动态创建指向正确 STS、领域 url 和时间戳的重定向 URL。这样当前的 web app & sts 可以继续做它正在做的事情,而其他的 auth 进程可以访问它需要的东西(adfs sts)。这听起来像是可以成功吗?它可能比 R-STS 的想法更复杂,但我明白这将如何更好地工作。感谢您的帮助。
    • 这可能会起作用,但是从另一个应用程序控制一个应用程序的登录流程听起来很奇怪。没有人这样做。为什么你这么反对 r-sts 的想法?
    • 我正在考虑一种可行的方法,并且我了解它的工作原理。当然,我了解正在发生的事情的概念,并且我当前的实现工作正常我不相信我了解所有实际过程。借此并创建一个动态确定可以与多个 STS 对话的 STS?这是我最迷失的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2011-08-21
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2019-11-27
    • 2010-09-13
    相关资源
    最近更新 更多