今日やること
今日はFacebookアカウントでOpenAMにサインインをしてみます。
わたしの場合、OpenAMの活用場所が従業員向けのIAMとなっているので、きっと使わない機能だとおもいます。完全に興味本位での検証です。
俗にいうソーシャルログインっていわれている機能ですが、仕組み自体はOpenID Connectと似たようなもんでしょう。たぶん。
Facebook開発者になろう
FacebookからFederationしてもらうにあたり、当然ですがFacebookが提供しているエンドポイントをたたきます。まずは、たたくためのクライアント登録(Relying Partyの登録)を行います。
下記のURLにアクセスします
Facebookの認証画面が表示されるので、ログインします。
サインイン後、ライセンスアグリーメントなどが表示されますが、最終的に以下のような画面が表示されます。
設定 => ベーシックからクライアント登録を行います。
おおよそ、以下のような感じで入力します。
- 表示名
- Example IAM
- アプリドメイン
- iam.example.com
- 連絡先メールアドレス
- サイトURL
こんな感じです。
アプリIDとapp secretはclient id
とclient secret
に当たります。後ほど、OpenAM側に設定するので、控えておきましょう。また、アプリドメインとサイトURLのドメイン部は一致している必要があります。
ソーシャル連携設定
続いて、OpenAM側の設定をいれていきます。
管理者アカウント(ユーザー名はamadmin
)でOpenAMにサインインします。
Dashboard => Configure Social Authenticationをクリックします。
Configure Facebook Authenticationをクリックします。
ここで先ほどFacebook側で取得したclient id
とclient secret
を入力します。
(Facebook側でclient secret
は決められちゃうんだし、Confirmのフォームはいらない気がする...)
設定が完了すると、チェーンとモジュール、サービスを追加しといたよ!と表示が出ます。
Facebookアカウントを使って、OpenAMにサインインする
それでは、確認していきましょう。
本連載でたてたRelying Party上に配置したphpinfo()を実行するコンテンツにアクセスします。(https://rp.example.com/cgi-bin/phpinfo.php
)
サインイン画面が表示されますが、見た目が変わってます。下段のほうにFacebookのアイコンが表示されていますので、こちらをクリックします。
Facebookのログイン画面が表示されます。Facebookアカウントを使ってログインします。
ログインに成功すると、ユーザー属性の連携同意画面が表示されます。ここでの連携はFacebookからOpenAMへの連携です。いつもと逆なので注意していください。
続いて、OpenAMからRelying Partyへのユーザー属性の連携の同意画面が表示されます。Facebook上のユーザー情報が伝搬されていることが確認できます。
Federationが完了後、phpinfo()が実行され、連携されたユーザー属性情報が確認できます。注目すべきはOIDC_CLAIM_SUB
の値です。OpenAMから連携されるsub(subject)
はOpenAM上における一意性のある文字列でしたが、ここではFacebook上における一意性のある文字列となります。ただ、そういった情報をFederationするのは良しとしない風潮があるようで、実際はPPID(Pairwise Pseudonymous Identifier) なる仮名のようなものらしいです。へぇ~、何を危惧しているんだろう?Federationの向きと逆行したアイデンティティの紐づけを**許さんぞっ!**って感じですかね~?
おまけ
ちなみに、今日の確認の手順ではOpenAM上に存在しない認証情報を使ってOpenAMに認証したわけなんです。ただ、FacebookからOpenAMへのFederation時に、きちんとユーザーが作られていました。
$ sudo /home/openam/openam/opends/bin/ldapsearch -D "cn=Directory Manager" -w password -h localhost -p 50389 -b "ou=people,dc=openam,dc=forgerock,dc=org" uid=facebook-*
dn: uid=facebook-XXXXXXXXXXXXXXXX,ou=people,dc=openam,dc=forgerock,dc=org
objectClass: inetuser
objectClass: iplanet-am-managed-person
objectClass: kbaInfoContainer
objectClass: iplanet-am-auth-configuration-service
objectClass: devicePrintProfilesContainer
objectClass: sunFederationManagerDataStore
objectClass: inetorgperson
objectClass: forgerock-am-dashboard-service
objectClass: sunFMSAML2NameIdentifier
objectClass: sunIdentityServerLibertyPPService
objectClass: top
objectClass: iPlanetPreferences
objectClass: sunAMAuthAccountLockout
objectClass: pushDeviceProfilesContainer
objectClass: organizationalperson
objectClass: person
objectClass: iplanet-am-user-service
objectClass: oathDeviceProfilesContainer
mail: XXXXXX@XXXXXX.XXX
sn: XXXXXX
cn: XXXXXX XXXX
givenName: XXXX
userPassword: {SSHA}z8fTrMTp77PKCo7eqWRypqznuN+RrfxHsAZZZw==
uid: facebook-XXXXXXXXXXXXXXXX
inetUserStatus: Active
(パスワード情報はFederationしていないのに、つくられている...なんなんだこれは...(◞‸◟))
まとめ
- OpenAMにはソーシャルのアカウントと連携する機能がある
- 割と簡単に〇〇アカウントでログインが実装できる
- 今日はFacebookだけだったけど、MSアカウントとGoogleアカウント、
野良その他のOpenID Providerとも連携できる
明日は何しよう~?
ばい!