OpenAM + Facebook
OpenAM10.0 OAuth2.0を使ってみる を参考に。
まず、Facebook Developerサイトに、OpenAM のURLを登録し、APPキーとAPPシークレットを生成する。
https://developers.facebook.com/apps
その後、OpenAM の[アクセス制御]タブで[/(最上位のレルム)]リンクをクリック。
[認証]タブで[モジュールインスタンス]を新規作成する。
このとき、名前をつけて、OAuth2.0を選択する。
このモジュール名を後で使う。(ここでは「Facebook」とする)
作成したモジュールリンクをクリックし、設定する。
Facebook Developerサイトで作ったAPIキーとシークレットを、Client Id, Client Secret として入力する。
あと、Proxy URL を自分のサイトに書き換えろと書いてあるので、~/openam/ の箇所を自分のOpenAMにする。
Create account if it does not exist:
Prompt for password setting and activation code:
の2項目が有効になっているので、やりたいことにあわせて変更すべし。
Create account if it does not exist:
のほうは、FacebookアカウントがOpenAMに登録されてないとき、勝手に登録する。(私は有効にした)
これを無効にしていると、OpenAMに存在しないユーザがログインするとき、
ユーザーにはこの組織におけるプロファイルがありません。システム管理者に連絡してください。
というエラーになる。
Prompt for password setting and activation code:
のほうは、OpenAMにリダイレクトされたときに、パスワード設定画面が出てくる。
何が起こるかわからなかったので、無効にしてしまった。
そして Facebook にログイン。
OpenAM のログイン画面のURLに、module=モジュール名をパラメータとしてくっつける。
例: http://OpenAMドメイン/openam_10.0.0/UI/Login?module=Facebook
このURLにアクセスしたとき、
An error occurred with Test. Please try again later.
API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.
というエラーが出たときは、OpenAM側に設定した Proxy URL が間違ってる可能性があるので要確認。
(私の場合は openam_10.0.0 というパスなのだがopenamのまま修正してなかった)
うまくいけば、Facebook のログインページにリダイレクトされる。
○○でFacebookアカウントを利用するにはログインしてください。
というメッセージが出てる。
ログインして、Facebook 画面で Go to App ボタンをクリックする。
○○ would also like permission to:
というメッセージが出るので、Allow ボタンをクリック。
そしたら何故か、
セッションがタイムアウトしました。
というOpenAM画面のエラーが出たが、Facebook にはログインできてた。
さて、これで何ができるかな?