我使用 OneLogin SAML 测试连接器作为带有 ruby-saml gem 和提供的示例程序的模拟 IDP。这工作正常。
在我的实际应用程序中,我们是 SP,并且有多个身份提供者,每个身份提供者都有多个需要 SSO 到我们的应用程序的用户。
我观察到在示例应用程序中,我的 AuthnRequest 没有在任何地方定义用户的 nameID(电子邮件地址),而是以数字 id 的形式附加到 IDP URL。例如https://app.onelogin.com/saml/metadata/5551212,app.onelogin.com 标识 IDP,5551212 标识“用户”。我意识到当 onelogin 是 IDP 时,“用户”实际上是一个应用程序 ID,但在我们的例子中,我们希望它识别一个实际用户,而不是一个应用程序。
- AuthnRequest 不包含 nameID 元素是否正确?
- 我应该使用数字 ID 在 IDP 的 URL 中识别用户吗?数字 id 必须在各方之间离线共享,并且必须在发起 URL 中传输。我喜欢这种方法,因为它不会在 URL 中公开任何识别信息,例如电子邮件地址。
- 我是否应该通过对电子邮件地址进行 Base64 编码并将其附加到 URL 来识别用户?这不太安全,但它可能没问题,因为传输将始终使用 SSL 加密。它避免了离线握手和共享数字ID。