单点登录-关于PHP Simple SAML的两个问题


single sign on - Two questions about PHP Simple SAML by OneLogin

如果有人有使用Simple SAML (PHP) https://github.com/onelogin/php-saml的经验,我将非常感谢您的帮助。

首先,我让它工作了。我的应用程序是服务提供商,它确实允许从外部身份提供商进行身份验证。好哇!

然而,在这个过程中我有两个问题:

1)我的SP生成一个元数据URL。如果客户端已经提供了其IDP的详细信息,那么该代码可以正常工作。我可以看到php-saml代码构建了设置对象,该对象验证并返回元数据XML。所有好。

但是如果客户端请求元数据URL(为了在他们的IDP中配置我的SP,首先),它会报告一个错误:

"无效的数组设置:idp_entityId_not_found, idp_sso_not_found, idp_cert_or_fingerprint_not_found_and_required"

显然,这个异常是不言自明的:当然,这些细节确实还没有提供。

所以我的问题是:在查看SP元数据的XML时,它没有返回任何它们的IDP细节,那么为什么不能在不知道这些细节的情况下生成元数据?这是一个问题的原因是,如果IDP在他们的端有相同的问题(即他们不会有SP的详细信息,得到相同的错误,所以两者都不能继续)?!

2)作为设置数组的一部分,它要求一个x509证书和一个私钥来签署请求。目前我正在使用我的网站的SSL证书(my-domain.com)。

但是我看到其他SP让人们下载他们的证书。

所以我可以让人们下载我证书的x509部分——我假设是公共位。但我想知道如果证书甚至需要链接到元数据/ACS url使用的域?

或者它可以是任何旧证书,例如自签名证书?你是怎么做的?

谢谢!这让我很困惑。这当然不简单。

我是OneLogin SAML Toolkit的维护者。

与1相关)我们已经有了拆分设置验证的请求,我们将很快在所有工具包中实现:https://github.com/onelogin/python-saml/issues/74

与2)相关

SAML需要x509证书/密钥来签名/加密SAML元素。

  • 一些IdPs/sp使用相同的Apache/Nginx服务器的x509来启用HTTPs(购买证书)

  • 其他人使用自签名证书,(您可以使用该工具创建您的证书(https://www.samltool.com/self_signed_certs.php)。我建议在创建它们时使用IdP/SP域,以便以后能够识别它们(但SAML不需要)。您可以使用旧的,但由于您可以随时生成它们,因此将它们链接到域并获得它们是一个很好的做法,以避免其他人在过去共享它)。