【问题标题】:How does trust work between an IDP and a SP in SAML v2.0?在 SAML v2.0 中,IDP 和 SP 之间的信任如何工作?
【发布时间】:2021-12-10 19:25:35
【问题描述】:

在阅读了大量关于 SAML 协议的文档后,我仍然不明白 IDP 和 SP 之间的信任是如何工作的。

我知道 IDP 和 SP 都必须有一个包含 x509 证书的“元数据”文件。为了建立这种信任,IDP 和 SP 必须交换这些元数据文件。

但我不明白这在技术上是如何工作的。根据我的研究,许多 IDP 提供通过上传元数据文件以图形方式执行此操作。我的最终目标是在 Golang 中实现 SAML 协议。这就是为什么我想了解它是如何工作的。

提前致谢!

【问题讨论】:

  • 这只是标准的 PKI。 IdP 使用私钥签署消息,SP 使用公钥验证签名,反之亦然。
  • 感谢您的快速回复。那么元数据毕竟没有真正的交换?
  • 是的。这就是交换公钥(以及其他设置)的方式。 Wikipedia page 是一个很好的起点,但请记住,这是一个 BIG 协议。我希望 golang 已经有很好的 XML 规范化和 XML 签名库,否则你会得到享受。
  • 之前编写过多个部分 SAML 实现,我认为一个完整的、安全的、从头开始的实现是一个多年的项目,即使没有 XML/加密的东西。
  • 我已经阅读了维基百科文档,但我没有找到任何关于元数据交换的信息。但是,谢谢,我会看得更准确。实际上,SAML 库已经存在于 golang 中,所以我想我会以它们为基础。但是我没有发现任何关于 IDP 和 SP 之间信任的信息。所以我想尝试自己实现它

标签: go saml-2.0 idp trust


【解决方案1】:

当您首次在 SP 和 IdP 之间设置集成时,它们会交换元数据 XML。 SP 从 IdP 获得一个,IdP 从 SP 获得一个。

它可以通过多种方式进行交换,例如通过电子邮件、让 SP 以表格形式上传或在您的服务页面上公开您的元数据。重要的是 SP 和 IdP 相互获取元数据,并且他们相信他们是从合适的人那里得到的。

元数据包含很多东西,比如端点和支持的服务,还有公钥。这些密钥用于在两者之间签署消息。

当 SP 向 IdP 发送消息时,SP 使用其私钥签名,IdP 使用 SP 元数据中的公钥进行验证。反之亦然,当 IdP 发送某些内容时,它会使用其私钥对其进行签名,然后 SP 会使用 IdP 元数据中的公钥对其进行验证。这样每个人都可以相信邮件来自预期的发件人。

我在blog post I wrote if you need it 中有一些其他细节。

我也同意@Robby Cornelissen 的观点。 SAML 不简单,做对了,后果很严重。

【讨论】:

  • 您好,感谢您的回复,但这并不能完全回答我的问题:假设我在 Golang 中开发了一个 SP 和一个 IDP。我创建了一个我手动交换的元数据文件。从技术上讲,我该如何建立信托?有什么特殊要求吗?
  • 信任是通过您交换元数据文件并配置您的 IdP 和 SP 以使用它们来建立的。当您在后续通信中使用它们时,您将使用来自对方的元数据中的密钥来验证消息是否来自它们。您是否询问是否有交换元数据的特殊要求?
  • 好的,谢谢,我开始明白了。我已经知道如何交换元数据。我真正的问题是:我想用 Golang 开发一个 SP。为此,我使用任何 IDP。所以我会得到它的元数据文件。有了我的 SP 的元数据和我想在本地使用的 IDP 的元数据后,如何具体建立信任?
  • 信任通常是通过您相信您从正确的来源获得 IdP 元数据而建立的。为了进一步相信元数据来自正确的来源,可以对元数据进行签名,但你当然需要信任正在使用的密钥
猜你喜欢
  • 2023-01-24
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 2017-02-06
  • 2018-12-14
  • 1970-01-01
  • 2014-10-28
  • 2015-11-08
相关资源
最近更新 更多