LoginSignup
6
5

More than 5 years have passed since last update.

OpenAMをOpenID Providerにする

Posted at

今日やること

これまでは、OpenAMからのフェデレーション(認証情報と属性情報の連携)の受け側はPolicy Agentがやってくれました。

001-a.jpg

ここから数回は流行りのOpenID Connectを使ってフェデレーションを試してみたいなぁと思います。

001-b.jpg

OpenID Connectってなに?

OpenID Connectについて語る記事でも無ければ、多くを語るほどの知識がわたしには無いので、勉強するのにむっちゃ役に立ったサイトを参照します。

公開資料 | OpenID Foundation Japan

入門スライドからRFCの日本語訳までいろいろ載ってます。すごい(小並感
(都会には勉強の機会があっていいなぁ~(◞‸◟))

今のところのわたしの理解を3行でまとめると、

  1. Federation(ID連携)という分野の技術で、RFCにもなってる
  2. 「この人(こんな)認証に成功したよ」って情報と「認証成功した人の属性」情報を連携する
  3. OAuth 2.0のシーケンスで前述のID連携をする

ってぐらいです。なんだか仕様は多いように感じるのですが、Policy Agentでやっていたようなこと(シングルサインオンとプロフィール情報の連携)がしたいだけなので、とりあえずそれを目指してやっていきます。

OpenAMをOpenID Providerにする

それでは設定します。

OpenAMの管理者アカウント(ユーザー名はamadmin)でOpenAMの管理コンソールにサインインします。

Dashboard => Configure OAuth Providerをクリックします。

002.JPG

続いて、Configure OpenID Connectをクリックします。

003.JPG

古臭いUIが表示されます。いろいろ設定値がありますが、何も考えずに右上の作成をクリックします。

004.JPG

参考までに、設定項目について簡単に説明しますと、

  • リフレッシュトークンの有効期間
    • リフレッシュトークンっていうアクセストークンを再取得するときに使うトークンの有効期限
  • 認可コードの有効期間
    • ID連携をバックチャネルで行うときにフロントチャネル側に出回るトークンの有効期限
    • 基本的に短命で1回しか使えない
  • アクセストークンの有効期間(秒):
    • 認証したユーザーの属性情報を取得するときに使うトークンの有効期限
  • リフレッシュトークンの発行
    • そもそもリフレッシュトークンを発行するのか?って設定
  • Issue Refresh Tokens on Refreshing Access Tokens
    • アクセストークンを再取得した時にリフレッシュトークンを再生成するかどうかの設定

って感じかなっ!!?(たぶん)

作成が完了すると、Services => OAuth2 プロバイダという項目が出来上がっています。アクセスすると以下のような感じです。

005.JPG

動作確認

OpenAMをOpenID Providerに設定した時点で、いろいろなエンドポイントが有効化されています。手っ取り早く確認するには、/openam/oauth2/.well-known/openid-connectというエンドポイントにGETリクエストを送ります。

$ curl -k https://iam.example.com/openam/oauth2/.well-known/openid-configuration
{
   "response_types_supported":[
      "code token id_token",
      "code",
      "code id_token",
      "id_token",
      "code token",
      "token",
      "token id_token"
   ],
   "claims_parameter_supported":false,
   "end_session_endpoint":"https://iam.example.com:443/openam/oauth2/connect/endSession",
   "version":"3.0",
   "check_session_iframe":"https://iam.example.com:443/openam/oauth2/connect/checkSession",
   "scopes_supported":[
      "address",
      "phone",
      "openid",
      "profile",
      "email"
   ],
   "issuer":"https://iam.example.com:443/openam/oauth2",
   "id_token_encryption_enc_values_supported":[
      "A256GCM",
      "A192GCM",
      "A128GCM",
      "A128CBC-HS256",
      "A192CBC-HS384",
      "A256CBC-HS512"
   ],
   "acr_values_supported":[

   ],
   "authorization_endpoint":"https://iam.example.com:443/openam/oauth2/authorize",
   "userinfo_endpoint":"https://iam.example.com:443/openam/oauth2/userinfo",
   "claims_supported":[
      "zoneinfo",
      "address",
      "profile",
      "name",
      "phone_number",
      "given_name",
      "locale",
      "family_name",
      "email"
   ],
   "id_token_encryption_alg_values_supported":[
      "RSA-OAEP",
      "RSA-OAEP-256",
      "A128KW",
      "RSA1_5",
      "A256KW",
      "dir",
      "A192KW"
   ],
   "jwks_uri":"https://iam.example.com:443/openam/oauth2/connect/jwk_uri",
   "subject_types_supported":[
      "public"
   ],
   "id_token_signing_alg_values_supported":[
      "ES384",
      "HS256",
      "HS512",
      "ES256",
      "RS256",
      "HS384",
      "ES512"
   ],
   "registration_endpoint":"https://iam.example.com:443/openam/oauth2/connect/register",
   "token_endpoint_auth_methods_supported":[
      "client_secret_post",
      "private_key_jwt",
      "client_secret_basic"
   ],
   "token_endpoint":"https://iam.example.com:443/openam/oauth2/access_token"
}

/openam/.well-known/openid-configurationには、OpenID Providerの設定情報が展開されており、また、きちんと仕様が決まっています。何が書かれているか知りたい場合は、以下のリンクをご参照ください。
ID連携の受け側(Relying Party)はこの情報を参照しながら動作するように実装すると色んなOpenID ProviderとID連携できそうですね。

いったん〆

今日はあんまり時間取れませんでした。すみません。
今日のまとめですが、

  • OpenID ConnectはID連携のための仕様
  • OpenAMは1分でOpenID Providerになれる
  • OpenID Providerの設定情報を展開するエンドポイントがある

ってとこです。

あしたはApacheをRelying Party化して、シングルサインオンと属性連携みたいなことをしてみる。

ばい!

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5