OpenAMのOpenID Connectへの対応:OSSによるアイデンティティ管理(4)(3/3 ページ)
OpenAMは、SAMLをはじめとする多くのフェデレーションプロトコルに対応しています。先日ローンチされたOpenID Connectにもいち早く対応しました。
OpenAMのOpenID Connectへの対応
2013年11月8日、OpenID Connect 1.0の最終承認(2014年2月27日)に先立って、OpenID Connectに対応したOpenAM 11.0.0がリリースされました。これにより、OpenAMはOpenID ConnectのOPとして機能できるようになりました。
さらに、現在開発中のOpenAM 12.0.0では、OpenID ConnectのRPサイドの機能である「OpenID Connect IDトークン認証」モジュールを提供する予定になっています(注4)。この機能は、OPで認証されたエンドユーザーを、OpenAMと連携するアプリケーションへSSOできるようにします。デフォルトでGoogleがOPとして設定されています。
注4:「OpenID Connect IDトークン認証」モジュールは、RPの仕様を完全に実装しているわけではありません。機能概要については、後述する「表2 OpenAMのOAuth 2.0 / OpenID Connect対応状況」の中で説明します。
OpenAMにおける、OpenID ConnectおよびそのベースとなっているOAuth 2.0の対応状況は、次の通りです。
プロトコル | 役割 | 機能概要 | 対応バージョン |
---|---|---|---|
OAuth 2.0 | クライアント | OAuth 2.0クライアント認証モジュールを設定することで、OpenAMがOAuth 2.0のクライアントとなり、FacebookやWindows Liveなどにログインを委譲できるようになる。 | 10.0.0 |
認可サーバー | OpenAMがOAuth 2.0の認可サーバーとなり、OAuth 2.0のクライアントであるWebアプリケーションなどに、ユーザー情報へのアクセス権限を付与できるようになる。 | 10.1.0 | |
OpenID Connect 1.0 | RP(Relying Party) | OpenID Connect IDトークン認証モジュールを設定すると、OpenAMに対するログインリクエストのヘッダーに、OPから取得したIDトークンが含まれているかをチェックするようになる。IDトークンが含まれていると、その値を検証し、妥当と判断した場合はエンドユーザーをOpenAMにログイン済みの状態にする。 | 12.0.0(予定) |
OP(OpenID Provider) | OpenAM 11.0.0からは、OpenAMにOAuth 2.0認可サーバーの設定を行うことで、OpenID Connect 1.0のOPとしても機能するようになる。これにより、RPの認証をOpenAMに委譲することが可能。 | 11.0.0 | |
表2 OpenAMのOAuth 2.0 / OpenID Connect対応状況 |
OpenID Connect OPとしてのOpenAMの設定
OpenAMにOPとしての役割を持たせるための設定はとても簡単です。まずOpenAMの管理コンソールに管理者ユーザーでログインし、トップページ(共通タスクページ)にある「OAuth2の設定」をクリックします。
表示された「OAuth 2.0の設定」画面で「作成」ボタンをクリックします。これだけで、最低限の機能を持ったOPとしてOpenAMが機能するようになります。
OAuth 2.0 認可サーバーの設定しかしていませんが、前述した通り、OpenID ConnectをサポートするOAuth 2.0 認可サーバーはOPであり、OpenAMの場合はこの設定だけでOPとしても機能するようになります。
作成したOAuth 2.0認可サーバーの設定は、「アクセス制御」→「レルム名」→「サービス」→「OAuth 2.0 プロバイダ」の順で画面遷移し、表示された「OAuth 2.0 プロバイダ」の編集画面で確認できます。必要に応じて各値を変更してください。
実際にOPとして動作していることは、http://[OpenAMサーバーのURL] /.well-known/openid-configuration(例えば、http://sso.ossc.com/openam/.well-known/openid-configuration)にアクセスすることで確認できます。このURLは、RPがOPの各エンドポイントなどの情報を検索するためのURLで、OpenID Connect Discovery 1.0の仕様によって規定されています。
ブラウザーなどでアクセスしてみると、以下のようなJSON形式のレスポンスが返ってきます。
{ "authorization_endpoint" : "https://openam.ossc.com/sso/oauth2/authorize", "check_session_iframe" : "https://openam.ossc.com/sso/oauth2/connect/checkSession", "claims_supported" : [ "phone", "email", "address", "openid", "profile" ], "end_session_endpoint" : "https://openam.ossc.com/sso/oauth2/connect/endSession", "id_token_signing_alg_values_supported" : [ "HmacSHA256", "HmacSHA512", "HmacSHA384" ], "issuer" : "https://openam.ossc.com/sso", "jwks_uri" : "", "registration_endpoint" : "https://openam.ossc.com/sso/oauth2/connect/register", "response_types_supported" : [ "token id_token", "code token", "code token id_token", "token", "code id_token", "code", "id_token" ], "subject_types_supported" : [ "public" ], "token_endpoint" : "https://openam.ossc.com/sso/oauth2/access_token", "userinfo_endpoint" : "https://openam.ossc.com/sso/oauth2/userinfo", "version" : "3.0" }
認可エンドポイント(authorization_endpoint)やトークンエンドポイント(token_endpoint)、サポートしているレスポンスの種類(response_types_supported)などが確認できると思います。
OpenID Connect RPのプロファイルの登録
OPとしての設定ができましたが、これだけではRPと連携することはできません。RPのプロファイル(RPに関する情報、例えば、RPの名前やリダイレクトURIなど)をOPに登録する必要があります。OpenAMでは、RPのプロファイルを事前に登録することも動的に登録することもできます(注5)。後者の実装はOpenID Connect Dynamic Client Registration 1.0で規定された仕様に従います。
注5:動的登録:RPのプロファイルを事前にOPに登録しておくのではなく、前述の.well-known/openid-configurationから取得した登録エンドポイント("registration_endpoint"の値)にアクセスして、そこにRPの情報を登録することをいいます。どのOPを選択するか、エンドユーザー自身が決定できるようにする目的で、このような仕様が策定されています。
ここでは、前者の方法について説明します。OpenAMの管理コンソールに管理者ユーザーでログインし、「アクセス制御」→「レルム名」→「エージェント」→「OAuth 2.0 クライアント」の順で画面遷移し、表示された「OAuth 2.0 クライアント」画面にあるエージェントの「新規」ボタンをクリックします。名前とパスワードを入力して「作成」ボタンをクリックすると、OAuth 2.0クライアントが作成されます。
完了したら一覧にあるそのRPを選択し、「OAuth 2.0クライアント」の編集画面で、リダイレクトURIやスコープの値を実際のRPと一致するように修正します。
これにより、OpenID ConnectをサポートするOAuth 2.0 クライアント(つまりRP)のプロファイルが作成されます。
OpenAMが提供するOpenID Connect機能を実際に動作確認することができるRPのサンプルが提供されています。フォージロックのMark Craig氏のGitHubに公開されています。
このサンプルによって、以下が確認できます。
- OpenID Connect認可コードフロー
- OpenID Connectインプリシットフロー
- OpenID Connect動的クライアント登録
詳細な手順に関しては、OpenAM 11.0.0 管理者ガイドの「Chapter 14. Managing OpenID Connect 1.0 Authorization」を参照してください。
OpenAMをOpenID ConnectのOPとして使用するメリット
OpenID Connectはプロトコルであるため、OpenAMを導入しなければ利用できないわけではありません。その仕様を理解し、ゼロから実装したOPを公開することもできます。しかし、OPとしてOpenAMを利用することで、開発コストを削減できるだけでなく、以下のようなメリットが得られます。
(1)リスクベース認証などの多様な認証機能を使用できる
OpenID Connectは、認証の方法(どういう観点で認証成功とするか)までは、規定していません。OpenAMをOPとすることで、第2回の記事で紹介したような多様な認証機能を使用できます。通常のIDパスワードによる認証だけでなく、リスクベース認証により不正なアクセスを検知し、追加のワンタイムパスワード認証を要求するといった多要素認証の導入も、OpenAMを利用すれば簡単に実現できます。
(2)OPサーバーを冗長化できる
前回紹介したコアトークンサービスにより、冗長構成となっている一方のOPサーバーがダウンしても、OpenID Connectの認証フローが継続できるようになっています。OpenAMの設定データストアであるOpenDJのレプリケーション機能を利用して信頼性を高めています。
(3)脆弱性の作り込みを防止できる
先日Facebookなどで「Covert Redirect」という脆弱性が見つかりました。これはOAuthやOpenID Connectの仕様の理解が不十分なまま実装したサービスを公開してしまったことに起因しています。OpenID ConnectはSAMLと比較すると分かりやすいプロトコルといえますが、実装にはHTTPやセキュリティに関する基礎知識とフェデレーションプロトコル特有の専門知識を多く要求されます。従って、独自にOPを公開する場合、仕様をきちんと理解した上で実装し、十分な検証をしなければ、脆弱性を作り込んでしまう可能性があります。OpenAMのような専門のソフトウェアを使用する場合は、そういった脆弱性のあるサービスを公開する危険性が減ります。
(4)複数のフェデレーションプロトコルを提供するサーバーを兼任できる
OpenAMはOpenID ConnectのOPとして単独で機能するだけでなく、SAMLやWS-Federationなどの複数のフェデレーションプロトコルを理解するIdPやSPとしての役割を兼ねることもできます。既存のSAMLのSPと、これから新たに開発するOpenID ConnectのRPを含む複数のアプリケーションに対してSSOを実現することも可能です。もちろんSAMLなどのフェデレーションプロトコルを使用しないSSOもできます。
まとめ
今回はOpenAMが対応しているフェデレーションプロトコル、特に最新版で対応したOpenID Connectについて解説しました。OpenAMを使用することで、OpenID Connectの標準的なフローに、OpenAMの強力な認証のステップを追加することができます。また、信頼性と可用性の高いマルチフェデレーションプロトコルハブとして機能し、多くのサービスを連携することができます。
次回はアイデンティティ情報の統合管理ソフトウェアである「OpenIDM」について説明します。OpenIDMもOpenAM同様にフォージロックが提供するOSSで、アイデンティティ情報のプロビジョニング、ライフサイクル管理を行うことができます。
著者プロフィール
和田 広之(わだ ひろゆき)
野村総合研究所のオープンソースサポートサービス OpenStandiaで、オープンソースを使ったサポートや製品開発の業務に従事。
Twitter: @wadahiro
田村 広平 (たむら こうへい)
OpenAM コミッタ。
野村総合研究所のオープンソースサポートサービス OpenStandiaで、OpenAMを中心としたOSSの研究開発・テクニカルサポートを担当。
Twitter: @tamura__246
Copyright © ITmedia, Inc. All Rights Reserved.