【问题标题】:Is there a SAML library for The Go Language?有 Go 语言的 SAML 库吗?
【发布时间】:2012-08-31 21:47:11
【问题描述】:

我看到goauthgo-oauth OAuth 库是为Go Programming Language 编写的,但是在网上搜索了几个小时却没有找到SAML

我想使用 Go 来实现 SSO 支持,使用 SAML 为 Web 服务提供支持,但如果没有 Go 的 SAML 库,我将不得不将 SAML 逻辑“包装”在一个单独的服务中,并以另一种语言实现。

有谁知道 Go 友好的 SAML 库,或者知道一些在 Go 程序中使用 Java、C 或 PHP 库的技巧?

【问题讨论】:

  • 您可以使用 CGO 在 Go 中非常轻松地包装 C 库。详情在这里:golang.org/doc/articles/c_go_cgo.html
  • 感谢您的链接!很高兴知道我至少可以选择为 Lasso 编写 Go 包装器,例如。如果 Google 能够为他们的语言提供一个 SAML 库并为我省去麻烦,那当然会很好。
  • 如果您的 SAML 用例足够简单,您可以在没有库支持的情况下自行实现它。这是一个示例:sanatgersappa.blogspot.com/2012/11/…
  • @voidlogic - 这几乎不是一个可用的 saml 实现。它大致相当于基本密码验证,大多数系统不允许这种断言。

标签: go saml-2.0


【解决方案1】:

我用过gosaml,效果很好,但也有来自机器人和铅笔的go-saml

我想在一年后回答这个问题会很好,因为在这里为寻找 Go 的 SAML 库的人提供某种答案仍然很好。

【讨论】:

  • 感谢您的链接。对于我来说,go-saml 项目看起来更有用,因为为了实现 SAML SSO,我需要生成 SAML authRequests 验证 SAML authResponses。
  • 甜蜜。我很高兴能在某种意义上提供帮助。两个我都用过,都很不错。验证总是一件有趣的事情。
【解决方案2】:

我还没有看到 Go 的 SAML 实现,但您可以使用已经在您的应用程序前面实现它的服务器。

最受支持的 SAML 实现之一是 Shibboleth。 apache 模块是最成熟的,并且可能是最容易使用的方法,因为您只需将应用程序放在 apache 中的反向代理后面。还有一个 fastcgi 身份验证器,它使用相同的后端,但我不能说它易于实现。

如果您只需要一个服务提供者,最简单的 SAML 绑定是 HTTP-POST-SimpleSign。我在 python 中创建了一个proof-of-concept implementation,以尝试演示我能做到的最简单的 SP。我没有声称这个模块的健壮性,但你可以看到它可以用不多的代码来完成。这是假设您正在使用的身份提供者支持此绑定。与往常一样,在部署任何自定义安全相关代码时要小心。

【讨论】:

  • +1 用于链接到概念验证实现。看来您的断言检查服务(附加到相对 URL /SSO)实际上除了打印“authResponse”安全断言的属性之外没有做任何事情 - 至少您应该验证 IdP 签名- 但我认为您的观点是生成“authRequest”并捕获 authResponse 以进行进一步处理(和额外验证)并不需要太多。没错,但即使我只关心使用 POST 绑定的 SSO 登录,从头开始实施时也会有很多细节会出错。
  • @Peter - 同意,这就是为什么我不再使用这个小库的原因。我前段时间写了这篇文章,但我记得它肯定会验证 IdP 签名(通过 M2Crypto)。您需要 pem 中的 IdP 证书,如果 sig 失败,saml.py:118 会引发 SAML_Error。不过,我还没有检查 Go 中的基本签名/验证需要什么。
  • 事实上,我希望我的 ACS 能够做更多,而不是简单地验证 IdP 签名,以及使用已完成库的优势之一(如 SimpleSAMLphp ,我之前已经成功地用来实现 SP 逻辑)是有人已经建立了处理“信任关系元数据”的机制。我也知道我可以构建一个反向代理来向我的应用程序的其余部分隐藏“联合身份”实现细节——关键是我想使用 Go 来实现代理。
  • 啊,是的——联邦需要做更多的工作。我的示例假设证书是通过安全的侧通道交换的,这仍然是一个非常常见的用例。虽然我对其他阅读者的免责声明仍然是,不要在生产中使用此代码(或者至少要非常小心,并审查所有内容)。
【解决方案3】:

如果您想在您的断言消费者端点中验证来自 AWS IdP 的 SAML 回复,那么您最好使用 https://github.com/crewjam/saml,因为它不依赖于 libxmlsec1 系统库。

由于某种原因,libxmlsec1 无法成功验证来自某些 IdP (AWS) 的 SAML 回复(可能是因为某些未定义的命名空间)。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多