0

我们在 Classic ASP 中有两个旧网站,在 ASP.NET 2.0 中有几个网站。我们的新开发也在 ASP.NET 中,并且逐渐我们可能会将我们的经典 ASP 站点也迁移到 .NET。所有这些网站都使用相同的后端数据库。

目前,我们计划将用户身份验证转移到单个服务器并开始使用单点登录 (SSO)。我无法决定什么是最好的或正确的方法。我们的 asp.net 网站将 FormsAutentication 与 CustomMembership 和 RolesProvider 一起使用,即我们使用我们的自定义表而不是默认的 aspnet_membership 表。

我能想到的方法:

1:使用网络服务:我可以将验证码移动到网络服务,我们所有的网站都可以使用它。但是当我们涉及到 ClassicASP 站点时,我不确定单点登录如何适应。

2:我听说过DotNetOpenAuth:我们的外部用户是由我们的内部人员创建的。他们只能使用我们提供的用户名/密码登录。因此他们无法使用 Google、Yahoo 或任何其他用户名/密码登录。所以我不确定 DotNetOpenAuth 是否适合我们的情况。我在 DotNetOpenAuth 下载中看到了 SSO 示例,但不知道如何开始。

如果有人能指出我正确的方向,请。我浏览了各种文章和文档,但不知道从哪里开始。

4

2 回答 2

2

好吧,您可以选择一种被动单点登录协议。您可以在 WS-Federation、SAML 协议或 Shibboleth 之间进行选择,但第一个,WS-Federation 在 .NET 上很容易通过 Windows Indentity Foundation 子系统得到支持。

WS-Federation 的工作方式是将身份验证/授权外部化到单独的 Web 应用程序(所谓的Security Token Service)。每个联合客户端应用程序(所谓的依赖方)都依赖于服务提供的信息。

基本的控制流程是这样的:

  1. 客户将他/她的浏览器指向一个 RP 应用程序
  2. 浏览器重定向 (302) 到 STS
  3. 如果访问了 STS 并且用户已经登录到 STS,请转到 5。
  4. STS 显示登录页面并验证用户
  5. STS 向浏览器返回一个页面,该页面包含一个带有所有身份验证信息的签名 XML 令牌以及一个用于重定向到 RP 应用程序的小型 javascript
  6. RP 应用程序获取令牌并根据提供的信息创建自己的身份验证

WIF 为您提供了轻松构建 STS 和 RP 的工具,并且遗留应用程序的集成也很简单 - 您可以努力在遗留应用程序级别处理协议,或者提供一个“brige”,一个使用 WIF 的 .NET 应用程序,它依赖于在 STS 上并将身份验证信息传递给遗留应用程序。

同样很棒的是,使用 WIF,您仍然坚持使用旧的、良好的概念,如表单身份验证和成员资格提供程序 - 它可能是 STS 实现的首选。

WS-Federation 协议本身不仅提供单点登录,还可以让您轻松处理单点注销(一些其他协议如 openid 不支持)。

阅读本书中有关该主题的更多信息:

http://www.amazon.com/Programming-Windows-Identity-Foundation-Dev/dp/0735627185

于 2011-12-12T19:48:44.247 回答
1

查看本指南“基于声明的身份和访问控制”。特别是第3 章:“Web 和 Windows Azure 的基于声明的单点登录”(Azure 不是必需的)。

它很好地解释了现代微软实施单点登录策略的方式。

此外,这篇TechNet 文章对我们开始使用 WIF 和 ADFS 2.0 有很大帮助。

于 2011-12-12T19:56:28.257 回答