質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SAML

SAMLは、ユーザー認証に必要な情報をインターネットドメイン間で安全に交換することを目的としたXMLベースの標準規格。複数のWebサイト・サービスに一度ログインするだけで、SAML対応のクラウドサービスやWebアプリを利用することができます。

Q&A

解決済

1回答

498閲覧

SAMLを用いたSSOでの認証情報の保管場所について知りたい。

KapiyoNatto

総合スコア14

SAML

SAMLは、ユーザー認証に必要な情報をインターネットドメイン間で安全に交換することを目的としたXMLベースの標準規格。複数のWebサイト・サービスに一度ログインするだけで、SAML対応のクラウドサービスやWebアプリを利用することができます。

0グッド

1クリップ

投稿2023/09/26 06:29

SAMLを用いたSSOを実現するSPの開発を行なっています。
SAMLについて色々なサイトを漁ったのですが、どれも重要なことがあまり書かれていなかったり、書いていることが人によって違うので正確な情報が分からない状態です。
まず、SSOの流れの理解についているか合っているか教えていただきたいです。
その上で、分からないことについて教えていただきたいです。

SSOの流れ

  1. ユーザーがSPにアクセスした時、"どこか"からSAMLを取り出して認証処理を行う。
  2. OKの場合はSPのアクセスしたかったリソースに到達。NGの場合は3の処理へ
  3. SPが認証要求を作成し、IdPへ送信。ユーザーはIdPのログイン画面へリダイレクトされる。
  4. ユーザーがログインに成功すると、IdPは認証応答を作成し、SPへ送信。ユーザーはSPのコールバック用のパスへリダイレクトされる。
  5. 認証応答を受け取ったSPは認証応答に対して認証処理を行い、OKの場合、認証情報を"どこか"へ保管し、ユーザーをアクセスしたかったリソースへリダイレクトさせる。

分からないこと

上記SSOの中で書かれている、"どこか"がどこなのかが不明です。SSOでは2回目のアクセス時にはログインが不要なので、どこかしらに保管されているんだろうなと言うことしか分からないです。人によってはsessionだったりcookieだったり書いていてどれが正解かわかりません。一般的にどこに保管するのか教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SPは認証情報を保管しません。「このユーザはIdPが認証アサーションを発行したユーザだ」という情報を保管します。

そもそも、SPはユーザから認証情報をまったく受け取りません。ユーザが認証情報を入力するのはIdPの認証機構に対してです。SPには、そのユーザがIdPによって認証されたユーザだということしか分かりません。SPはIdPのサーバ証明書でIdPのアサーション (IdPの秘密鍵によって署名されていると考えてください) を検証し、成功すればそれを信用します。

この時点では、SPにはユーザが認証されていることがわかるだけでユーザの属性 (ユーザ名など) はわかりません。そこで通常は、SPはIdPに対して属性要求アサーションを発行します。IdPはそれに応えて属性アサーションを発行してIdPのポリシで提供することを認めている属性をSPに知らせます。

SPに知らされる属性は、ユーザがIdPで認証するのに使用した認証情報とは関係がないことに注意してください。SPがアカウント名などの認証情報を知らなくてもそのユーザが認証されていることは確かです (SPが信頼するIdPがそう言っているのですから)。それどころか、IdPのポリシによってはSPに知らせることのできるユーザ属性がまったくないことさえあります。SPにとってはどこの誰かもわからないユーザであっても、IdPが認証されたユーザであると認めているのならサービスを提供することができます。

このように、SAML技術を利用して、各SPに認証情報や余計なユーザ属性を保管させないようにしながらユーザが安全にサービスを利用できるしくみが実現できます。

なおSPは、SPにアクセスしてきているユーザを識別するためになんらかのセッション機構を利用することがありますが、それはHTTPクッキーなどを使って実現されることがあります。ただ、これはSAMLの仕様ではなく、個々のSPとサービスアプリケーションとの連携の仕組みであり、具体的な実装はプロダクトによって様々です。ですのでこの点については、個別のプロダクトについての疑問があれば別途ご質問されるとよいかと思います。

投稿2023/09/26 07:27

編集2023/09/29 03:29
ikedas

総合スコア4352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KapiyoNatto

2023/09/28 13:46

ご回答ありがとうございます。 ご回答いただいた内容と照らし合わせながらもう一度調べてみました。 「このユーザはIdPが認証アサーションを発行したユーザだ」と言うのはSAML内にある署名を検証することで検証できるということで合っていますでしょうか。 また、 > SPは、SPにアクセスしてきているユーザを識別するためになんらかのセッション機構を利用することがありますが、それはHTTPクッキーなどを使って実現されることがあります。 というのは、具体的にどのような方法がありますでしょうか?
ikedas

2023/09/29 03:33

回答に加筆してみました。
KapiyoNatto

2023/09/30 04:01

加筆ありがとうございます。 理解が深まりました。ベストアンサーとさせていただき、クローズ致します。
KapiyoNatto

2023/09/30 05:59

すみません、今思い出しました。最後に一番お聞きしたかったことをご教示ください。 SAMLアサーションがIdPから発行され、SPではSAMLアサーションを検証することで「このユーザはIdPが認証アサーションを発行したユーザだ」というのがわかるということは理解できました。 SAMLアサーションは認証後の次からのSPアクセス時にも利用されると思いますが、一般的にこのアサーションを保存するのはCookieでしょうか?
ikedas

2023/10/02 00:39

アサーションを受け取って保管する (SAMLではこれを「アサーションを消費する」と表現します) のはSP自身です。保管のしかた (サーバのメモリ上、ストレージ内など) はSPの実装次第です。保管しているものをHTTPクッキーに入れてどこかに送ったりはしません。 回答に書いたように、HTTPクッキーの使用はウェブベースのサービスアプリケーションとSPとの連携の仕組みのひとつなので、SAMLの仕様とは別です。ウェブベースでないアプリケーション (例: SAMLによるSSOの下でのSSHログイン) なら、まったく別の仕組みで実現されるでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問