Keycloakのソーシャル連携（SNS連携）を試してみる

# 概要
本記事ではソーシャル認証によりTwitterのアカウントでKeycloakにログインする手順について説明する。
※本記事は、Keycloakのバージョンアップに伴い、[Keycloakのソーシャル連携（SNS連携）を試してみる](https://qiita.com/tamura__246/items/02b3b75f36a22d0c960a)の記事を最新化したものです。

ソーシャル認証とは、GoogleやFacebookなどのSNSにユーザーの認証を委譲するKeycloakの仕組みであり、例えば、Twitterにログイン済みのユーザーであれば、Keycloakと連携する全てのサービス・プロバイダーやアプリケーションに、追加の認証を要求されずアクセス可能となる。これを実現するために、OAuthという認可のプロトコルが利用されており、シーケンスは以下のようになります。

![シーケンス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/c4887377-6cc2-f7dd-9d3e-d2034e78e661.png)


今回はこれを実際に試して見る。手順としてはとても簡単で以下の通りである。

 1. Facebookの設定
 2. Keycloakの設定

※今回は簡略化のため、サービス・プロバイダーはKeycloakのユーザー・プロファイル画面とする。

# 前提事項
この記事の操作を始める前に、Keycloakのセットアップを完了し、管理ユーザーを作成する必要がある。以降の手順は[こちら]()の記事を参考に必要なセットアップが完了していることを前提とする。
また、本記事では、Keycloakの`21.1.1`を利用する。

# 設定
## 1. Facebookの設定
Facebook側の設定を進めるにあたり、Keycloakの設定値をコピーする必要があるため、一度管理者アカウントでKeycloakにログインする。ログイン後、左側のメニューから「Identity providers」をクリックし、表示される一覧から「Facebook」をクリックする。
![1_SNS設定①.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/030138f4-828e-0da5-d3a4-c00a2bd94d16.png)
Facebookの設定画面で入力する必要があるため、本画面の「Redirect URI」をコピーする。また、Facebook側の設定後に本画面でFacebookの設定値を入力する必要があるため、本画面はこのまま開いておく。
![1_SNS設定②.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/b106cd51-8af1-a978-d143-97087c4af1bc.png)
次に、[Meta for Developpers](https://developers.facebook.com)へアクセスして、ログインしたのちに「アプリの作成」ボタンを押下して設定を進める。
以下の画面が表示されたら「Facebookログインを設定」を選択する。
![1_SNS設定③.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/56c4bd19-d2e2-54b4-5dc5-42d42168757e.png)
次の画面では「Website」と「いいえ、ゲームを構築していません」を選択して、「次へ」ボタンを押下する。
![1_SNS設定④.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/db458fd5-b8b1-9706-8a63-fdf977a752fe.png)
以下では「アプリ名」に適当な名前を入力して、「アプリを作成」ボタンを押下する。
![1_SNS設定④⑤加工.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/31545797-299d-008b-a1f1-a8305cf22f98.png)
アプリが正しく作成されると以下のように作成したアプリのダッシュボード画面が表示される。
![1_SNS設定⑤.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/08193a9e-f240-1371-110c-7aeb9ae7502c.png)
ここで必要な設定を追加していく。
左側のメニューから「製品」を選択して表示される以下の画面で「設定」のリスト内の「設定」を押下する。
![1_SNS設定⑥.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/55603ac4-d541-ff8a-ca67-b56c09cf7d30.png)
表示される以下の画面でKeycloakからコピーした「リダイレクトURI」の`http`を`https`に変更した状態で「有効なOAuthリダイレクトURI」へ設定し、下部にある「設定を保存」ボタンを押下する。
![1_SNS設定⑦.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/ed5b2923-4632-7016-bfc8-90a8e028232c.png)
次に、左側のメニューから「設定」→「ベーシック」と選択し、表示される画面で「プラットフォームの追加」ボタンを押下する。
表示されたモーダル内で「Website」を選択して「次へ」ボタンを押下する。そうすると画面上に「サイトURL」を入力する欄が追加されるため、そちらにサイトのURLを入力する。
![1_SNS設定⑧.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/1f178149-ea68-a5c2-65f0-04587750f22a.png)
ここまででFacebook側での「必要な設定は完了、最後にテストで動作検証するために作成したアプリのテストアプリを作成する。
左上のアプリ名が表示されている部分を選択して、表示される一覧で作成したアプリを選択した状態で「テストアプリを作成」ボタンを押下する。
テストアプリが作成されると以下のようにテストアプリのダッシュボードが表示される。
![1_SNS設定⑨.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/b759a1c9-d93d-7380-dd4f-6e2f2986defc.png)
以降はこのテストアプリの設定値を使ってKeycloak側の設定をしていく。

## 2. Keycloakの設定
Keycloakへ設定する情報を確認するため、Facebookの左側のメニューで「設定」→「ベーシック」を選択して以下の画面を表示させる。
![Keycloak2_設定①.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/74e34589-44ef-e900-c8b2-b392fccb8cc5.png)
最初に表示していたKeycloakの「Identity providers」の登録画面へ戻り以下の通り値をコピペする。

- FaceBook側の`アプリID` → Keycloak側の`Client ID`
- FaceBook側の`app secret` → Keycloak側の`Client Secret`

コピペ後に「Add」ボタンを押下してプロバイダを登録する。
![Keycloak2_設定③.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/92e00411-7243-4f3e-d041-5522e77af6f5.png)
これですべての設定が完了、最後にSNSアカウントでKeycloakのユーザー・プロファイル画面(SP相当)へログインできるか動作検証していく。

# 動作確認
動作確認として、利用者ページ(http://localhost:8080/realms/master/account/#/)にアクセスして、「Sign in」を押下する。
![3_動作検証0-1編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/958c2eab-a637-cbdc-34a3-670fc568191a.png)
サインイン画面で「Facebook」ボタンが表示されていることが確認できる。このボタンを押下する。
![3_動作検証①.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/0e53212d-1c83-9f6f-bd7c-fd1d7a2f98ae.png)
ここでFacebookにログイン済みであれば、アプリケーションの連携画面が表示される(未ログイン時はFacebookのログイン画面が表示されるのでログインする)。
![3_動作検証①-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/5e44c056-d21e-58c5-85e6-da0a3079893d.png)
こちらはOAuthによる認可の画面であり、「～としてログイン」ボタンを押下するとKeycloakのアカウント画面が表示される。
アカウント画面では右上にFacebookから取得した名前が表示されており、Facebookアカウントでログインできることが確認できる。

:::note info
認可の画面上に「氏名」、「プロフィール写真」、「メールアドレス」へのアクセス許可とあるが、これはKeycloakのデフォルト設定で「id,name,email,first_name,last_name」を要求するようになっているためである。
:::

![3_動作検証②編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/0819f45f-699b-5198-dcb8-fe0a252a6db7.png)

また、管理コンソールのユーザーにも同様に登録されていることが確認できる。
![3_動作検証③編集.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333320/a77ec6a3-204c-7e89-f1b3-24e2ccc17a6d.png)


# 参考資料
https://www.keycloak.org/docs/latest/server_admin/index.html