技術2課の鎌田です。
前回記事で、AWSとActive Directoryとの連携をご紹介しました。
今回は、仕組みを見てみたいと思います。
※なお、この記事では広く用いられているSAMLプロトコルの用語をベースとし、Active Directoryの用語は()書きで補足しています。
目次はこちら。
- 認証と認可(承認)
- ADFSサーバーの仕組みと用語
- ADFSでサポートされるプロコトル
- まとめ
1.認証と認可(承認)
まず、アクセスしてきたユーザーの確認に関わる用語と中身を見ていきましょう。
「認証」とは、本人確認の機能を指します。
一般的には、ユーザー名とパスワードを入力して、本人かどうかの確認をします。
認証を行うシステムとして、Active Directoryがある、という訳ですね。
認証では、認証に成功すると、TGT(Ticket Granting Ticket)というチケットをActive Directoryに発行してもらえます。
一方、「認可(承認)」とは、ユーザーがリソースにアクセス可能か確認する機能を指します。
例えばですが、ファイルサーバーのアクセスなどは、認可(承認)が行われています。
同じドメインに参加している場合、認可(承認)を行うシステムとして、やはりActive Directoryが使われています。
認可(承認)では、認可(承認)されるとSTというチケットがActive Directoryによって発行され、ST(Service Ticket)の有無によって、アクセス可能かどうかを判定しています。
しかし、外部のSaaSサービスなどは、当然同一ドメインということはないので、認可(承認)を実施できません。
そこで登場するのが、Active Directory Federation Service(ADFS)サーバーです。
ADFSサーバーが、認可(承認)に必要な情報を生成して、やり取りを行います。
2.ADFSサーバーの仕組みと用語
ADFSを使った認可(承認)では、認可(承認)されると「トークン」と呼ばれる情報を生成し、やり取りが行われます。
トークンはADFSサーバーによって、改ざん防止のためデジタル署名されます。
このデジタル署名の時に使われるのが、「トークン証明書」です。
トークンの中身の1つ1つの情報を「クレーム」と呼びます。
このクレームに入れることが出来る情報のソースとして、Active Directoryの情報を使うことが出来ます
トークンが発行され外部サービスに提示されるまでは、以下のような流れで行われています。
このADFSサーバーを使った方式では、外部サービス側ではID情報を作りません。
(前回のブログでも、AWSにはIAMロールを作成したのみで、IAMアカウントは作成しませんでしたね。)
この連携方式を、「クレームベースセキュリティ」と呼びます。
この方式では、外部サービス側は信頼されたトークンのみを受け付けるようになっていないと、大変です。
この時、ADFSサーバーと外部サービスとの間で、STS信頼という信頼関係を構築しておくことで、
ID情報を作らなくてもID情報が外部サービスになくても大丈夫なようになっているのです。
一方、外部サービス側にもアカウントを作成する方式は、「ID連携」と呼ばれます。
(当社で取り扱っているOne LoginなどがID連携を行うことができます。)
ID連携の際に、外部サービス側にIDを登録するプロセスが「プロビジョニング」という名前で呼ばれています。
ADFSで、認証を行う側はClaim Provider(CP)、認可を行う側はRelying Party(RP)と呼びます。
CP側はActive Directory、RP側はSaaSサービス、と考えると分かりやすいでしょう。
先ほどの流れの図で当てはめると、以下のようになります。
3.ADFSでサポートされるプロコトル
ADFSサーバーでは、WS-FederationとSAMLプロトコルに対応しています。
使われる用語も異なるので、表に整理しました。
なお、単にSAMLと言ってしまうと、SAMLプロトコルなのか、SAMLトークンなのかが判然としないため、プロトコルを指す場合は「SAMLプロトコル」と明示しましょう。
プロトコル | WS-Federation | SAMLプロトコル |
トークンの種類 | SAMLトークン など | SAMLトークン など |
主なID連携の動作 | パッシブ(HTTP/HTTPS) | WebSSO(HTTP/HTTPS) |
認証/認可(承認)のシステム名 |
認証側:Claim Provier(CP) 認可(承認)側:Relying Party(RP) |
認証側:IDプロバイダ(Idp) 認可側:サービスプロバイダ(SP) |
実装されているアプリケーション | Office365 |
AWS Salesforce Google Appsなど |
4.まとめ
- 認証と認可(承認)にはActive Directoryを使うことができるが、外部サービスとの連携にはADFSサーバーが必要。
- ADFSサーバーの主な役割は、「トークンの生成」しての認可(承認)、トークンのデジタル署名。
- ADFSサーバーでの連携方式は「クレームベースセキュリティ」という。
たくさん用語があって、少し分かりづらいかも知れませんね。
それぞれの用語は、前回のブログと並べて見ていただくと、少し分かり易くなると思います。
ADFSを中心としたシングルサインオン環境は、正しく構築・運用すれば、大変便利なものです。
お悩みのことなどありましたら、是非当社にご相談ください。