2012-03-22 14 views
2

私はサイトwww.e1.comと言う。 www.e1.comはサービスプロバイダです。そのサービスをクリックするたびに、アイデンティティプロバイダにリダイレクトされます。たとえば、www.e2.comとなります。その前に、サービスプロバイダ(www.e1.com)では、ユーザーにCookieが設定されているかどうかを確認します。初めてクッキーがないので、空のSessionId値を送信します。したがって、私はIDなしでwww.e2.comにSAMLリクエストを送信しています(クッキーが設定されていないため)
このSAML SSOの実装は正しいですか?

アイデンティティプロバイダでは、 www.e1.comがId値を送信したかどうか。それがnullの場合、私はセッションIDを作成し、それをデータベースに保存します(www.e2.com)。次に、ブラウザを[認証]ページにリダイレクトし、ユーザーの名前とパスワードが尋ねられ、認証されます。認証が成功した場合、セッションIDを含むSAML Responseを使用してブラウザをサービスプロバイダ(www.e1.com)にリダイレクトします。

サービスプロバイダでは、セッションID値がCookieに保存され、ブラウザはコンシューマサービスページ(ユーザーがアクセスしたいサービスページ)にリダイレクトされます。今

同じユーザが(セッション内で)同じサービスプロバイダ からいくつかの他のサービスにアクセスしたい場合は、ブラウザが明らかに要求SAMLと一緒にクッキーでのSessionIdを送ります。アイデンティティプロバイダはデータベース内のSessionId値をチェックします。データベース内にある場合は、ユーザがセッションですでに認証されているためログイン認証情報を入力せずにユーザにサービスへの直接アクセスを与えます。

これは、SAMLでシングルサインオンを実現する正しい方法ですか?または
この方法に欠陥がある場合、その欠陥を説明できますか?事前に

感謝:)

答えて

14

あなたの理解はここでかなり正しい:)

ない流れである:

  1. ユーザーは、SPに保護されたリソースにアクセスしようとします。 SPは、 ユーザがローカル(および認証されたセッション)を持っているかどうかをチェックします。そうでない場合は、ランダムIDを含む SAML <AuthRequest>を生成します。その後、SPはこのAuthnRequestを使用して をIDPにリダイレクトします。

  2. IDPは、ユーザーがローカルで認証されたセッションを持っているかどうかをチェックします。 場合は、IDPは、それに でSPを送られたIDと一致するinReplyTo属性を持つバックSPにAuthResponse を送信するユーザーを認証しますないAuthnRequest

  3. SPは、ローカルセッションを作成しますです。a)のセッションが期限切れまたはb)SP あなたはIDPがお送りします」と言ったあなたの2 .pointでIDP

+0

からSingleLogoutメッセージを受信しない限り、 SPへの後続の要求は、IDPを伴わないだろうAuthResponseは、AuthnRequestのSPによって送信されたIDと一致するinReplyTo属性を持つSPに戻ります。あなたは、IDPがこのAthResponseでユーザをSPにリダイレクトすることを意味しました。 – Ashwin

+0

こんにちはアシュウィン、短い答えははいあなたは正しいです。より長い答えは、SAMLバインディングに依存するということです。リダイレクトの場合、ユーザーのブラウザはAuthResponseを使用してSPにリダイレクトされます。ポストバインディングの場合、ユーザーブラウザはこのAuthResponseを使用してSPにPOST要求を行います。最後に、アーティファクトバインディングの場合、ユーザーはアーティファクトIDでSPにリダイレクトされます。 SPはIDPに問い合わせて、このアーティファクトIDを使用してAuthResponseを取得します –

+0

私が理解したリダイレクトバインディングとアーティファクトバインディング。しかし、どのようにポストリダイレクトを作成しますか?リダイレクトはgetメソッドのみを使用します。その後、どのように応答のあるユーザーを投稿にリダイレクトしますか? – Ashwin

関連する問題