KeycloakとDrupal8の連携

  •  
 
ホス2018年6月1日 - 14:11 に投稿

タグ

概要

  • KeycloakとDrupal8の連携方法をまとめます。
  • Keycloakのアカウントを使ってDrupal8で構築されたサイトにログインできるようにします。

前提

  • Keycloakの前提
    • Keycloakを構築済み
    • レルムを作成済み (本稿ではレルム名を "demo"とします) 
      → レルムの作成方法については、「Keycloakのレルムとユーザの作成方法」をご覧ください。
    • レルムにユーザアカウントを作成済み
  • Drupal8の前提
    • Drupal8のサイトを構築済み
    • ユーザアカウントを作成済み
  • OpenID Connectを使って連携します

手順

1. Keycloakの設定

  1. Keycloakに管理者アカウントでログインし、レルムが正しいことを確認します。
  2. OpenID Connectのクライアントを新たに作ります。
    左のメニューから、Cliants をクリックし、表示された画面の [Create]ボタンをクリックします。
    Clinetsの画面
  3. 以下の情報を入力し、[Save]ボタンをクリックします。
    • Client ID
      • "drupal8"
        ※任意の名前を設定できます。
        Client IDは、ログイン画面のURLに含まれます。
    • Client Protocol
      • "openid-connect"
    • Client Template
      • ※空欄にする
    • Root URL
      • 例)"http://drupal.example.com/"
        ※Drupal8サイトのURLを入力します。
  4. 新しいクライアントが作成されたことを確認します。
    新しいクライアント作成完了の画面
  5. Clinetsの画面でも確認することができます。
    Client IDの列の「drupal8」をクリックすると、クライアントの設定画面が表示されます。
    Clinetsの画面に新しいクライアントが追加されている
  6. drupal8のSettingsタブで以下を入力して、[Save]ボタンをクリックします。クライアントのsettingsタブ画面
    • Access Type
      • "confidential"
    • Valid Redirect URIs
      • 例)"http://drupal.example.com/openid-connect/keycloak"
    • Admin URL
      • 例)"http://drupal.example.com/"
    • Web Origins
      1. 例)"http://drupal.example.com/"
  7. Client「Drupal8」のCredentialsタブをクリックして、表示された画面の「secret」の値をコピーして、メモ帳などにメモしておきます。(あとで使います)
    クライアントのCledentialsタブ画面
  8. Keycloakの設定はこれで終わりです。
    次はDrupal8の設定を行います。

2. Drupal8の設定

2-1. 必要モジュールのインストール

  1. Drupal8のサイトに管理者としてログインしてください。

  2. 管理用メニューから、「機能拡張」をクリックして、[+新しいモジュールをインストール]のボタンをクリックします。
    機能拡張画面
  3. 以下の2つのモジュールをインストールします。
  4. まずはopenid_connectからインストールします。
    リンクをクリックして、表示されたDrupalコミュニティの画面を下にスクロールすると、「tar.gz」ファイルのダウンロードリンクがあります。
    今回はDrupal8を使っているので、「8.x」のバージョンのリンクを右クリックして、リンクのアドレスをコピーします。
  5. モジュールopenid-connectのダウンロード
  6. Drupalの「新しいモジュールをインストール」の画面に戻り、「次のURLからインストールする」のテキストボックスに、tar.gzのURLを貼り付けて、[インストール]ボタンをクリックします。
    モジュールopenid-connectのインストール
  7. インストール完了画面が表示されたら成功です。
    続けて、keycloakモジュールもインストールするので、「別のモジュールをインストール」をクリックします。
    モジュールopenid-connectのインストール完了画面
  8. 同様に、keycloakモジュールのページから、8.xのモジュールのリンクアドレスをコピーします。
    モジュールkeycloakのダウンロード
  9. Drupalの「新しいモジュールをインストール」の画面に戻り、「次のURLからインストールする」のテキストボックスに、tar.gzのURLを貼り付けて、[インストール]ボタンをクリックします。
  10. 「インストールは正常に終了しました。」が表示されたら、インストールは完了です。
    次は、インストールしたモジュールを有効にするので、「新しく追加されたモジュールを有効にします」をクリックします。
    モジュールkeycloakのインストール完了画面
  11. インストールした2つのモジュールを見つけて、チェックボックスをONにします。そして、[インストール]ボタンをクリックします。
    検索ボックスに「openid」と入力すると見つけやすくなります。
    モジュール有効化
  12. 「2個のモジュールが有効化されました: Keycloak Integration, OpenID Connect 。」と表示されたら、成功です。
    モジュール有効化成功画面

 

2-2. openid connect設定

  1. 管理者メニューの環境設定より「OpenID Connect」リンクをクリックします。環境設定画面のOpenIDConnect
  2. 「Enabled OpenID Connect clients」で"keycloak"をチェックします。OpenIDConnect設定画面keycloakをチェック
  3. 以下の項目を入力します。OpenIDConnect設定画面Keycloak
    • Client ID
      • "drupal8"
    • Client secret
      • ※Keycloakのクライアントdrupal8のsecret
    • Keycloak base URL
      • ※「https://example.com/」をご自分のKeycloakのドメインに変更します。例)"http://keycloak.example.com:8080/auth"
    • Keycloak realm
      • ※実際のレルム名に変更します。
      • "demo"
    • Authorization endpoint
      • ※「https://example.com/」をご自分のKeycloakのドメインに、「example-realm」を実際のレルム名に変更します。
      • 例)"http://keycloak.example.com:8080/auth/realms/demo/protocol/openid-connect/auth"
    • Token endpoint
      • ※「https://example.com/」をご自分のKeycloakのドメインに、「example-realm」を実際のレルム名に変更します。例)"http://keycloak.example.com:8080/auth/realms/demo/protocol/openid-connect/token"
    • UserInfo endpoint
      • ※「https://example.com/」をご自分のKeycloakのドメインに、「example-realm」を実際のレルム名に変更します。例)"http://keycloak.example.com:8080/auth/realms/demo/protocol/openid-connect/userinfo"
  4. 以下の3つのチェックをONにして、[設定を保存]ボタンをクリックします。OpenIDConnect設定画面チェックON
    • Override registration settings
    • Save user claims on every login
    • Automatically connect existing users
  5. 「設定オプションが保存されました。」と表示されたら、成功です。
    OpenIDConnect設定画面設定保存完了

 


2-3. openid connectブロックの追加

  1. 管理者メニューのサイト構築より「ブロックレイアウト」リンクをクリックします。
    サイト構築画面
  2. openid connectブロックを任意のリージョンに追加します。
    ※下図では「Sidebar second」に追加しています。
    ブロック設定1
    ブロック設定2
    ブロック設定3
    ブロック設定4

動作確認

  1. Drupal8サイトの管理者をログアウトし、トップ画面の右側にある「login with keycloak」ボタンをクリックします。
    Drupalトップ画面のOIDCログインボタン
  2. 表示されるkeycloakのログイン画面でユーザ名とパスワードを入力して、[Log in]ボタンをクリックします。
    Keycloakレルムログイン画面
  3. Keycloakでログインが成功すると、Drupal8サイトもログイン成功となります。
    右上の「アカウント情報」をクリックして、ログインしているユーザを確認してみましょう。
    Drupalログイン後画面
  4. Keycloakでログインしたユーザで、Drupal8のサイトにログインできていることが確認できました。
    Drupalアカウント情報画面
  5. これで、KeycloakとDrupal8の連携ができました。

 

トラブルシューティング

もしうまく動作しない場合は、今までの設定に間違いがなかったか確認してみましょう。
それでもうまくいかない場合は、Drupal8のレポートを見て、どこに問題があるのか確認してみましょう。

  1. Drupal8サイトに管理者ログインして、管理メニューの「レポート」画面の「Recent log messages」をクリックします。
    Drupalのレポート画面
  2. 「openid_connect_keycloak」に関するログを見つけて、クリックします。
    DrupalのRecentLogMessages画面
  3. 「Message」の内容を頼りに、問題がありそうな箇所を修正します。
    ※下図の場合、「Could not resolve host: keycloak.example.com; Name or service not known」(ホスト名が解決できない)なので、例えば、「/etc/hosts」にKeycloakサーバのドメインを記載するなどの解決策が考えられます。
    openid_connect_keycloakのログ詳細画面

 

今回の説明は以上になります。
最後まで読んでいただき、ありがとうございました。

 

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。