ソーシャルログイン サンプル

各種ソーシャルアカウントを用いてシングルサインオンするサンプルです。

## サンプルの説明 各種ソーシャルアカウントを用いてアプリケーションにログインします。 ----------------------------------------- ## 解説 [Auth0](https://addons.heroku.com/auth0)というアドオンを使い各種ソーシャルアカウントでのログイン(この場合はユーザをユニークに特定するの意)するサンプルです。 このサンプルでは - Facebook - Twitter - Google - Salesforce の4つのソーシャルアカウントでのログインとメールアドレス+パスワードの独自管理でのログインを提供しています。 独自管理のメールアドレス/パスワードはAuth0の用意するDBで管理されるので、開発者自身がアカウント管理用のテーブルでパスワードを管理する必要はありません。 ### Auth0について Auth0はソーシャルログインやシングルサインオンなどのユーザ認証まわりの機能に特化したWebサービスです。 ソーシャル以外にもAD/LDAP, Windows Azure AD, SAMLなどにも対応しているので企業内ユースにも対応できます。 - [機能一覧](https://auth0.com/pricing#features-list) コンシューマアプリではFacebook, Twitterなど複数のソーシャルアカウントでのログインをサポートするケースが多くありますが、Auth0を利用することでそれぞれ個別にOAuthの実装を行う必要が無くなり、ひとつのコードでAuth0のサポートするすべてのソーシャルアカウントに対応することができます。 また、ユーザのログイン履歴、ログイン回数などはAuth0のダッシュボードで確認できるので、自アプリ側で管理する必要があるのはAuth0の発行するユーザIDのみです。 ### 各種ソーシャルアカウントの設定 通常、ソーシャルアカウント連携を行う場合、ソーシャルアプリ側で連携アプリケーションに対するOAuthの設定を行う必要がありますが、Auth0をちょっと試してみるだけの場合はこの手順を省略できます。(Auth0ダッシュボードでチェックをONにするだけで新しいソーシャルアカウント連携を追加できます。) ただし、この場合認可のダイアログに表示される連携アプリケーションは「Auth0」となるので、実際にプロダクション環境で運用する場合は個別にソーシャルアプリ側の設定を行う必要があります。 コネクション設定 ソーシャルアプリ側の詳細な設定方法は設定ページ内の「How to obtain ...」のリンクをクリックすることで表示できます。 開発環境、ステージング環境など複数の環境でアプリを実行する場合に本番環境以外ではソーシャルアプリ側の設定を行う必要がない(=連携アプリケーションの管理を行う必要がない)こともAuth0の優位のひとつです。 ### ログインダイアログのWidget Auth0では中核となるサービス以外の周辺機能はすべてオープンソースで提供されています。 login-widgetもそうしたオープンソースで提供されている機能のひとつです。 - [ドキュメント](https://docs.auth0.com/login-widget2) - [GitHub](https://github.com/auth0/widget) このサンプルでもlogin-widgetを利用していますが、これを利用することでログインダイアログをほんの数行のコードで実装することが可能です。 (Auth0ダッシュボードで連携するソーシャルアプリを追加した場合、コード修正なしでダイアログ上にそのアプリが追加されます。) ソーシャルアプリの持つユーザプロフィール情報を認可後のトークンに含めるためにはsigninメソッドの引数に ``` widget.signin({ "scope" : "openid profile" }); ``` というオプションを指定します。 ### 認可後の処理の流れ ソーシャルアプリの認可画面からリターンした際には通常のOAuthの場合と同様にGETのクエリパラメータとしてcodeが付加されて自分の指定したURLにリダイレクトされます。(このcodeはソーシャルアプリではなくAuth0が発行したものです。) このコードをAccessToken(とそれに付随するユーザ情報)と交換することで処理は完了します。 交換によって得られるメッセージの形式はJWT(Json Web Token)形式です。 ドットで区切られた3つのpartのうち2つ目のpartがBase64エンコードされたユーザ情報なので、この部分をデコードすることでユーザ情報のJSONを得ることができます。 Auth0のGitHubには各種言語での認可後の処理のリファレンス実装があるのでそちらも参考にしてください。(このサンプルでは独自に実装を行っています。) - [JWTのドキュメント](https://docs.auth0.com/jwt) - [Auth0 GitHub](https://github.com/auth0) ### 関連ソース - [AuthServlet.java](https://github.com/FLECT-DEV-TEAM/heroku-samples/blob/master/src/main/java/herokuSamples/web/auth/AuthServlet.java) - [AuthCallbackServlet.java](https://github.com/FLECT-DEV-TEAM/heroku-samples/blob/master/src/main/java/herokuSamples/web/auth/AuthCallbackServlet.java) - [auth.html](https://github.com/FLECT-DEV-TEAM/heroku-samples/blob/master/src/main/webapp/WEB-INF/auth/auth.html)