LoginSignup
0
1

More than 5 years have passed since last update.

Facebookアカウントを使って、OpenAMにサインインする

Posted at

今日やること

今日はFacebookアカウントでOpenAMにサインインをしてみます。
わたしの場合、OpenAMの活用場所が従業員向けのIAMとなっているので、きっと使わない機能だとおもいます。完全に興味本位での検証です。

俗にいうソーシャルログインっていわれている機能ですが、仕組み自体はOpenID Connectと似たようなもんでしょう。たぶん。

Facebook開発者になろう

FacebookからFederationしてもらうにあたり、当然ですがFacebookが提供しているエンドポイントをたたきます。まずは、たたくためのクライアント登録(Relying Partyの登録)を行います。

下記のURLにアクセスします

Facebookの認証画面が表示されるので、ログインします。

001.JPG

サインイン後、ライセンスアグリーメントなどが表示されますが、最終的に以下のような画面が表示されます。

003.JPG

設定 => ベーシックからクライアント登録を行います。
おおよそ、以下のような感じで入力します。

こんな感じです。

006.JPG

アプリIDapp secretclient idclient secretに当たります。後ほど、OpenAM側に設定するので、控えておきましょう。また、アプリドメインサイトURLのドメイン部は一致している必要があります。

ソーシャル連携設定

続いて、OpenAM側の設定をいれていきます。

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

Dashboard => Configure Social Authenticationをクリックします。

007.JPG

Configure Facebook Authenticationをクリックします。

008.JPG

ここで先ほどFacebook側で取得したclient idclient secretを入力します。
(Facebook側でclient secretは決められちゃうんだし、Confirmのフォームはいらない気がする...)

009.JPG

設定が完了すると、チェーンモジュールサービスを追加しといたよ!と表示が出ます。

010.JPG

Facebookアカウントを使って、OpenAMにサインインする

それでは、確認していきましょう。
本連載でたてたRelying Party上に配置したphpinfo()を実行するコンテンツにアクセスします。(https://rp.example.com/cgi-bin/phpinfo.php

サインイン画面が表示されますが、見た目が変わってます。下段のほうにFacebookのアイコンが表示されていますので、こちらをクリックします。

011.JPG

Facebookのログイン画面が表示されます。Facebookアカウントを使ってログインします。

012.JPG

ログインに成功すると、ユーザー属性の連携同意画面が表示されます。ここでの連携はFacebookからOpenAMへの連携です。いつもと逆なので注意していください。

013.JPG

続いて、OpenAMからRelying Partyへのユーザー属性の連携の同意画面が表示されます。Facebook上のユーザー情報が伝搬されていることが確認できます。

014.JPG

Federationが完了後、phpinfo()が実行され、連携されたユーザー属性情報が確認できます。注目すべきはOIDC_CLAIM_SUBの値です。OpenAMから連携されるsub(subject)はOpenAM上における一意性のある文字列でしたが、ここではFacebook上における一意性のある文字列となります。ただ、そういった情報をFederationするのは良しとしない風潮があるようで、実際はPPID(Pairwise Pseudonymous Identifier) なる仮名のようなものらしいです。へぇ~、何を危惧しているんだろう?Federationの向きと逆行したアイデンティティの紐づけを許さんぞっ!って感じですかね~?

015.JPG

おまけ

ちなみに、今日の確認の手順では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とも連携できる

明日は何しよう~?

ばい!

0
1
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
0
1