使用 WIF 在 .NET Web Farm 中为多个电子商务网站实施 SSO?

2024-03-22

我有一个我认为相当复杂的问题,所以我会尽力在这里阐明它。

我正在寻找单点登录 (SSO) 解决方案。我知道有很多选择,但在我添加了它们需要满足的标准时排除了其中的大多数。以下是标准:

1.) SSO 必须添加到现有“系统”中。
2.) 现有“系统”由“X”个网站组成。
3.) 所有“x”网站都是电子商务网站。
4.) 这些网站均归 Y 公司所有,其 95% 的系统是内部构建的。
5.) “X”个网站中的每一个都位于同一个网络场中。
6.) 所有网站共享以下组件:

  • DAL(数据访问层)
  • 数据库(购物车、订单、用户、库存等...)
  • 身份验证(WebForms 和 MVC 中的表单身份验证)。

7.) 为了使当前环境正常工作,机器密钥已经在负载平衡服务器之间同步(并且已经保持了一段时间)。
8.) 由于以下原因需要高可用性和稳定性very交通量大。

所有这些标准都引导我走上了 WIF 和自定义 STS 的道路,以便与我们现有的会员身份验证服务一起使用。像 OpenID 和其他开源解决方案这样的东西似乎都倾向于跨公司的互操作性;这是不需要或不想要的。理想的解决方案将是 100% 内部的,并允许用户登录网站“1”,做他们想做的任何事情,然后转到网站“2”(也托管在负载均衡器后面,甚至可能在同一个负载均衡器上) Web 服务器(如用户访问网站“1”)并已登录。

以下是我研究过的替代方法的列表以及排除它们的相应原因(或者我应该重新考虑其中一些替代方法?)。

  • OpenID:这个被排除有几个原因,主要是因为我 组织正在寻找“内部”SSO 并与 外部网站或与外部网站一起使用的 ID 系统不是 想要的。
  • CAS:在大多数情况下,这似乎也是一个不错的选择。 最终它被排除了,因为它使用的技术(Java、 Apache、Maven 等...)将需要额外的努力和金钱来 理解、实施、支持和扩展(主要是 .NET 商店)。
  • OAuth:似乎它更适合公开受保护的数据 通过网络服务。完全定制 (http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx): A 完全定制的方法可能需要太长的实施时间 而且这种方法更关心安全性。
  • DotNetOpenAuth:依赖/基于 OpenID。

所以问题是:考虑到负载均衡器和跨网站已经共享的用户帐户数据,WIF 是否可以在我们现有的环境中工作,或者是否有更好的方法?

如果您需要任何说明,请告诉我。

EDIT:

只是为了澄清我想要实现的目标(或者考虑到我所做的研究,我认为我正在努力实现的目标)是:

当前设置(托管在 Dropbox 上的 JPEG) http://dl.dropbox.com/u/17737598/CurrentWebSetup.jpg
所需的设置(托管在 Dropbox 上的 JPEG) http://dl.dropbox.com/u/17737598/DesiredWebSetup.jpg


ADFS v2.0 仅针对 AD 进行身份验证。如果您当前的身份验证方法是其他方法(例如 SQL Server),那么您需要自定义 STS。

这些应用程序都是ASP.NET吗?

如果是这样,它们都需要使用 WIF 启用声明。

如果没有,如果例如Java 你必须用另一种解决方案来保护它们,例如OpenSSO / Ping 联合该产品并将其与 ADFS 联合。

如果是经典 ASP,有多种方法可以让 ADFS 处理身份验证,但授权是一个问题。这些角色将位于经典 ASP 无法访问的声明对象内。您也可以使用 C2WTS 来实现此目的。

您正在考虑身份验证或授权或两者兼而有之? ADFS 提供声明对象内的角色,因此程序中现有的授权机制可能必须更改。

您可以对 ADFS 站点进行负载平衡。

ADFS 当然可以在您的所有站点上启用 SSO。如果您将来需要考虑的话,它还可能允许您与其他站点/组织联合并通过 Azure ACS 使用外部凭据(例如 Facebook)。

它还允许您与 SharePoint 2010、CRM Dynamics 2010 和 Office 365 集成,所有这些都启用了声明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WIF 在 .NET Web Farm 中为多个电子商务网站实施 SSO? 的相关文章

  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • 在 PCL 中使用 System.Net.Sockets(.Net 4.5 + 电话 8)

    我现有的 Net 库已经适用于 Net 4 5 和 Windows Phone 8 现在我想将其转换为可移植类库 突然我无法使用System Net Sockets不再了 我只检查了 Net 4 5和Windows Phone 8 未选择X
  • Sqlite 删除速度极其慢 - 如何加快速度?

    我读到删除操作很慢 我想知道如何改进此检查 我有一个每天填充 10 15k 行的表 每次启动时我都需要清理所有超过 6 个月的记录 但是当数据库增长时 我开始遇到速度问题 当我运行此命令时 有接近 100 万条记录 即使我没有任何内容要删除
  • 如何在 .NET 中轻松取消转义 XML 实体

    我有一些代码返回 XMLNode 的 InnerXML 该节点可以只包含一些文本 带有 HTML 或 XML 例如
  • 访问 SSIS 脚本任务静态构造函数中的可配置值

    我有一个 SSIS 包 其中包含需要第 3 方程序集的脚本任务 由于不允许我将此程序集放置在 SSIS 服务器上的 GAC 中 因此我在运行时在脚本任务的静态构造函数中绑定该程序集 这article https blogs msdn mic
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 我们可以使用 EWS 托管 API 连接到 Exchange 2016 吗?

    我使用的是 EWS 托管 API 2 2 它的枚举中没有显示 Exchange 版本 2016 我可以看到 Exchange 2013 之前的版本 那么如何连接到 Exchange Server 2016 该 API 是否尚未从 Micro
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 使用 System.Security.Cryptography 将 Win32 Crypto API 调用转换为 C#

    我接到一项任务 要删除我们产品的一个 dll 并将其替换为纯 C 的 dll 旧的 DLL 是 NET 2 0 托管 C C CLI 它包装了对 Win32 本机加密 API 的调用 新的 DLL 应公开具有相同名称和方法的新对象 但应使用
  • Rfc2898DeriveBytes 与密码的 Sha2 哈希生成

    我最近知道使用 SHA256 为加盐密码生成密码哈希 在阅读了一些有关加盐密码和安全性的内容后 我看到rfc2898derivebytes and passwordderivebytes NET 中的类 使用有什么好处吗rfc2898der
  • 如何将数据插入 Microsoft Access 数据库?

    我正在尝试将数据插入 Microsoft Access 数据库 我将数据插入到 Access 数据库中 但只有第一次和第二次显示我插入的数据 当我重建应用程序时 我插入的数据消失了 我不知道他们去了哪里并且没有出现 我使用 C 和 NET
  • 为什么 GridView Rowupdating 事件不捕获文本框的新值?

    我正在使用网格视图 当我单击编辑按钮时 会出现更新和取消按钮 修改来自 EditItemTemplate 的文本框中的值后 新值不会显示在事件处理程序 rowupdating 中 而是获取渲染页面时出现的值 如何从这些文本框中获取新值并进一
  • LINQ:获取表详细信息

    我正在使用 LINQPad 我想了解表的架构详细信息 我知道我是用 SQL 来做的 SELECT column name FROM information schema columns WHERE table name table name
  • List.Clear() 在 C# 中是如何实现的?

    我假设它使用数组来实现 List 怎么List Clear 实施的 它实际上清理了数组还是只是为此列表创建了一个新数组 public class List private Array array public void Clear1 arr
  • 为什么 int 数组的最大大小小于 Int32.MaxValue? [复制]

    这个问题在这里已经有答案了 虽然这篇文章说它应该有效 https stackoverflow com questions 2338778 what is the maximum length of an array in net on 64
  • 在分布式事务中手动登记后,使用 enlist=false 的连接不会关闭

    我有一个分布式事务上下文使用ServiceDomain 在其中 我打开一个 SQL 连接 其中连接字符串指定Enlist false 这样它就不是自动地被纳入交易 然后 如果我使用手动在分布式事务中登记连接EnlistDistributed
  • 无法在 Visual Studio 2022 中启动调试适配器

    如果我创建一个启用了 Docker 支持的 ASP Core MVC 目标框架 5 0 并启动它 我会得到 发生一个或多个错误 无法启动调试适配器 附加信息可能会 在输出窗口中可用 操作被取消 这是调试输出 启用 DebugAdapterH
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht

随机推荐

  • 单元测试复杂交互的正确方法

    我必须开始使用 QualityTools UnitTestFramework 为我们开发的 Web 服务层编写一些单元测试 而我的方法从一开始似乎就不正确 单元测试似乎应该能够以任何顺序运行 而不依赖于其他测试 我最初的想法是拥有类似于以下
  • 错误:由于表单未连接,表单提交被取消

    关于潜在重复的免责声明 我也遇到过类似的问题 我想我现在已经阅读了几乎所有这些答案 但没有一个为我解决了问题 我有一个应用程序 前端是 React 后端是 Flask 服务器 我有一个重大问题 该代码似乎检查了前端和后端 但是当我单击表单的
  • R - 如何分割文本和标点符号但有例外?

    在 R 中分析 Facebook 评论进行情感分析 表情符号是在 符号之间的文本编码 例子 Jesus te ama
  • 使用 jQuery 的 GridView 向上和向下导航

    我正在尝试使用 jQuery 实现 GridView 向上和向下键盘导航功能 我已经为此编写了代码 但有一个错误 它只能工作一次 重现错误的步骤 将我的示例代码复制到您的 WebForm aspx 和 WebForm aspx cs 后 分
  • 在 C# 中向 DateTime 添加时间

    我有一个日历和一个包含一天中某个时间的文本框 我想创建一个由两者组合而成的日期时间 我知道我可以通过查看小时和分钟然后将它们添加到日历 DateTime 中来做到这一点 但这看起来相当混乱 有没有更好的办法 您可以使用日期时间 添加 htt
  • jquery中如何定义变量

    我想知道如何在 jQuery 中声明变量 我当前使用的代码是 name anirudha alert name 该代码工作正常 但如果我将其写为 name document myForm txtname value alert name 那
  • HttpListener 的使用

    我有以下 HTTP 侦听器方法 深受 MSDN 使用 HttpListener 类的示例的启发 我对编程相当陌生 我不知道从这里到哪里从我的 Main 初始化它 有什么建议么 public static void HttpListener
  • 使用 typegoose 将项目添加到 Ref 数组

    我延长了 2 个课程Typegoose Item and Player In the Player我的班级有一个数组Ref
  • 为 VS2022 构建扩展时出现有关 ProductArchitecture 的错误 VSSDK1311

    我正在构建 VSIX 项目并看到以下错误消息 VSSDK1311 vsixmanifest 必须包含 PackageManifest Installation InstallTarget ProductArchitecture 的值 我需要
  • 传递参数以包含在 Liquid 模板中

    在我的 Jekyll 支持的网站上 我有一个包含函数 可以执行类似功能的操作 但我不知道如何正确传递它的参数 当我使用 include 像这样传递参数 include function liquid foo baz quux 它只是传递文字
  • 从网络驱动器启动时,Structuremap 不加载注册表

    我是 Structuremap 的热心 新 用户 但我在加载注册表时遇到问题 当我从本地驱动器启动应用程序时 应用程序中的所有注册表都用于解析类型 我通过 ObjectFactory WhatDoIHave 验证了这一点 但是 当我从共享启
  • 如何隐藏 VsCode 滚动条?

    VsCode 中似乎曾经有一个隐藏滚动条的设置 editor scrollbar vertical hidden 但是 这似乎已被弃用 现在我收到错误Unknown configuration setting VsCode 中有隐藏滚动条的
  • LibGit2Sharp CheckoutPaths()

    我做了一次提交 49916 现在我想将提交的一个文件检出到工作目录中 该文件名为 NEW txt 如果我输入 Git 签出 49916 NEW txt 进入 Git Bash 后 它会创建 NEW txt 文件 其内容位于我的工作目录中 但
  • 非重叠串行端口挂在 CloseHandle 处

    我编写了一个自己开发的串行端口类 为了简单起见 我使用了阻塞 同步 不重叠 我浏览了所有 MSDN 文档 这对我来说很困难 我在从端口打开 传输或接收字节方面没有任何问题 所有操作都是同步并且不存在线程复杂性 function TSeria
  • Crystal Reports 11 - 添加无用的空白页,仅添加有数据的组标题

    我遇到了一个在使用 Crystal Reports 之前从未见过的奇怪问题 我为一家银行制作了一份复杂的 PDF 月度报告 生成了 200 多页 这些规范花了几个月的时间与客户进行调整 但现在它工作得很好 显示了所有应该显示的数据 所有数据
  • Kubernetes API 服务器日志中的 TLS 握手错误

    我正在研究一个AWS 中 Kubernetes 集群的 terraform 配置 https github com ericandrewlewis kubernetes via terraform 我已经让集群运行起来了 我可以通过 kub
  • 是否有通用方法将约束应用于类型应用程序?

    A comment https stackoverflow com questions 41111715 making a constraint of maybe a where eq a 41111825 noredirect 1 com
  • 不使用循环操作数组

    学习 VBA for Excel 我尝试在不使用循环的情况下完成尽可能多的编码 作为练习 将两个相邻范围的数字相乘 我想出了这个 Sub multiply range Dim a b c As Range Set a Range a1 a5
  • Polly 使用不同的请求主体重试请求

    我以前从未使用过 Polly 并且不确定这对 Polly 来说是否是一个好的场景 我正在调用一个列表为 1000 的端点DTO in the POST身体 现在端点将对每个执行一些验证DTO如果其中任何 DTO 验证失败 则返回 HTTP
  • 使用 WIF 在 .NET Web Farm 中为多个电子商务网站实施 SSO?

    我有一个我认为相当复杂的问题 所以我会尽力在这里阐明它 我正在寻找单点登录 SSO 解决方案 我知道有很多选择 但在我添加了它们需要满足的标准时排除了其中的大多数 以下是标准 1 SSO 必须添加到现有 系统 中 2 现有 系统 由 X 个