ruby-saml gem と提供されたサンプル プログラムを使用して、OneLogin SAML Test Connector をシミュレートされた IDP として使用しています。それはうまくいっています。
私の実際のアプリでは、私たちは SP であり、複数の ID プロバイダーがあり、それぞれにアプリへの 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 の共有を回避します。