在 asp.net 中使用 SAML2.0 进行 SSO

2024-01-18

我的要求是在asp.net中使用SAML2.0实现SSO。 我这边确实有 2 个供应商。想要将用户从一个站点传递到另一站点而不登录第二个站点。我以前从未使用过SAML2.0。 谁能帮我看看我该如何完成它。


首先让我们区分协议和令牌格式。我假设您正在谈论协议而不是令牌格式。但为了以防万一,这里有一些差异:

  • SAML 2 令牌格式。这只是您的应用程序将支持的令牌的格式。 WIF 开箱即用地支持这一点。
  • SAML 2 协议。这是您的应用程序必须理解才能在应用程序中获取令牌的 HTTP 交互。 WIF 不支持此功能,但您可以下载一个扩展(http://connect.microsoft.com/site116​​8/Downloads/DownloadDetails.aspx?DownloadID=36088 http://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=36088)

另一方面,您有一个场景,其中有多个身份提供商。 Wiktor 建议的书(我与人合着)更详细地解释了这种情况与多个合作伙伴的联合身份章节 http://msdn.microsoft.com/en-us/library/hh446524。我建议您阅读它以了解身份联合背后的概念。让我给您提供本文的简短版本和一些实现细节。有两种方法可以解决这个问题:

  • 在应用程序级别实现它。 WIF 将允许您信任多个身份提供商令牌(这是通过 X509 证书完成的)。然后,您必须根据 url 为每个身份提供商生成登录请求(例如https://idp1.yourapp.com https://idp1.yourapp.com or https://yourapp.com/idp1 https://yourapp.com/idp1)或用户选择(通过拥有一个带有两个链接的主页,每个链接对应一个身份提供商)。您还必须规范来自这些身份提供商的声明(也许其中一个会向您发送“name”声明,另一个会向您发送“upn”声明)。

    YourApp --> Identity Provider 1
            \-> Identity Provider 2
    
  • 使用所谓的“联合提供者”。这是另一台将向您的应用程序颁发令牌的服务器,它将与您的身份提供商建立信任关系。您不必让您的应用程序信任两个身份提供商,而是只信任您的联合提供商,并且联合提供商将信任身份提供商。这是一条信任链​​。

    YourApp --> Federation Provider --> Identity Provider 1
                                    \-> Identity Provider 2
    

该架构允许您:

  • 在不影响您的应用程序的情况下扩展您的身份提供商
  • 如果您以后有第二个应用程序,您只需复制第一个应用程序的实现
  • 您可以免费获得单点登录
  • 你会得到一个声明转换引擎(如果你使用 ADFS 之类的东西)
  • 如果您使用 ADFS 之类的东西,您将获得内置的 SAML 2 协议(而不必使用下面提到的扩展手动实现它)

当然,缺点是您现在需要维护其他东西(ADFS 服务器)。

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

在 asp.net 中使用 SAML2.0 进行 SSO 的相关文章

  • 如何逐行解析文本区域中的用户输入

    如果我有一个包含文本信息的变量 比如从文本区域获取 如何逐行读取字符串变量中保存的文本内容 在文本区域中输入的文本将以 n 输入键 来分隔行 您可以使用StringReader http msdn microsoft com en us l
  • “通用”电话号码的基本正则表达式

    我需要一个正则表达式 用于 ASP NET 网站 来验证电话号码 它应该是灵活的 唯一的限制是 应至少为 9 位数字 没有字母 可以包含空格 连字符 单个 我搜索过 SO 和 Regexlib com 但我得到的表达式有更多限制 例如英国电
  • asp.net/jQuery:使用 jQuery 将数据发布到弹出窗口 [IE]

    我正在尝试在 asp net 应用程序中使用 jQuery 将数据发布到弹出窗口 如果弹出窗口打开 我会收到三个错误 第一个错误是 Errror the value of the property is null or undefined
  • 检查Cookie是否存在

    从快速搜索开始堆栈溢出我看到有人建议使用以下方法来检查 cookie 是否存在 HttpContext Current Response Cookies cookie name null 或 在一个Page class this Respo
  • 无法使用 Javascript 重定向到另一个页面

    在 html 文件中使用 Javascript 重定向页面 我这样使用 window location href http www google com 它工作正常 但是当我在 aspx 中尝试时它不起作用 下面是我的代码 提前致谢
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 了解 ASP.NET 应用程序文件夹

    ASP NET 中的应用程序文件夹用于存储对运行网站至关重要的各种元素 我想更深入地了解这些文件夹 特别是文件夹的可访问性 根据有关的文章ASP NET 网站布局 http msdn microsoft com en us library
  • 错误:“无法在 Web 服务器上开始调试...”ASP.NET 4.0

    当我想在 IIS 服务器上创建网站时出现错误 我使用的是 Windows 7 和 Visual Studio 2010 我是否必须为 IIS 注册或配置 asp net 4 0 这里没有太多细节 但是当我尝试在刚刚从 3 5 更改为 4 0
  • 限制违反架构 - asp.net MVP

    如果我们在应用程序中定义了层次结构 对于前三层架构 我们如何限制后续开发人员违反规范 例如 在 MVP 不是 ASP NET MVC 架构的情况下 演示者应该始终绑定模型和视图 这有助于编写正确的单元测试程序 然而 我们也遇到过这样的情况
  • 在 javascript 中访问 ajax POST 响应

    我正在从 javascript 函数发出 ajax POST 请求 function UpdateMetrics ajax type POST url MyHandler ashx Param1 value1 data contentTyp
  • 如何从内容页检索母版页中的控件

    当我最近问一个关于如何从内容页检索母版页中的控件 许多人建议我使用内容页面中的这段代码 Label lbl this Master Page FindControl uxLabel as Label Note any server cont
  • 为什么静态方法不能用作 ASMX Web 服务中的 Web 服务操作?

    我只是想了解为什么我不能在 Web 服务中使用静态 Web 方法 为什么会受到限制 有人可以给我对此进行简洁的解释吗 答案是 因为你不能 它不是这样设计的 其设计是 将创建 Web 服务类的实例 然后调用实例方法 我只能猜测微软为什么这样设
  • 不支持 EF6 上下文类型“System.Data.Entity.Core.Objects.ObjectContext”

    我有一个使用 Visual Studio 2013 和 ADO NET 实体数据模型 EF6 创建的新项目 现在我必须使用一些动态数据函数 例如访问 MetaTable 对象 所以我添加以下代码 MetaModel model new Me
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 从备用位置获取实体框架连接字符串?

    如何从自定义配置文件而不是 web config 检索 Entity Framework 4 连接字符串 编辑 删除默认构造函数生成的代码并在分部类中重新创建它以使用拉入的连接字符串是否合理 我真的很想避免使用包括连接字符串在内的重载方法更
  • jQuery Datatable:分页和过滤器显示不正确

    我不知道如何解决这个问题 尝试了一整天但没有成功修复分页 我正在使用 jQuery 数据表 并且为了显示我的大量数据 我正在使用服务器端 作为测试 仅调用表中的 10 行数据 然后在传递到表之前 我重组了里面的数据dataSrc 使用这个解
  • HttpContext.GetGlobalResourceObject 始终返回 null

    我在 App GlobalResources 文件夹中创建了两个文件 SiteResources en US resx SiteResources sp SP resx 两者都包含 SiteTitleSeparator 的值 这是我想要做的
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 服务器不支持 C# 中的安全连接

    我在下面的代码中收到错误 服务器不支持安全连接 SmtpClient smtp new SmtpClient MailMessage mail new MailMessage mail From new MailAddress gmail
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P

随机推荐