あなたの WordPress アプリケーションに認証 (Authentication) を追加する
このチュートリアルでは、Logto をあなたの WordPress ウェブサイトに統合する方法を紹介します。
前提条件
- Logto Cloud アカウントまたは セルフホストされた Logto。
- Logto の従来のアプリケーションが作成されていること。
- WordPress プロジェクト:公式の WordPress インストールガイド に従って、WordPress ウェブサイトをセットアップしてください。
統合
プラグインをインストールする
OpenID Connect Generic プラグインを使用して、OIDC プロトコルを介して Logto をあなたの WordPress ウェブサイトに統合します。
- WordPress サイトにログインします。
- 「プラグイン」に移動し、「新規追加」をクリックします。
- 「OpenID Connect Generic」を検索し、daggerhart によるプラグインをインストールします。
- プラグインを有効化します。
リダイレクト URI を設定する
まず、リダイレクト URI を設定しましょう。プラグインの設定で見つけることができます。「Notes」セクションまでスクロールし、「Redirect URI」値をコピーします。
Logto コンソールのアプリケーション詳細ページに切り替え、リダイレクト URI を追加し、「変更を保存」をクリックします。
プラグインを設定する
必要な設定の詳細については、以下の表を参照してください:
プラグインフィールド | 説明 |
---|---|
Client ID | あなたの Logto アプリケーションのアプリ ID |
Client Secret | あなたの Logto アプリケーションのアプリシークレット |
OpenID Scope | email profile openid offline_access を入力 |
Login Endpoint URL | あなたの Logto アプリケーションの認可 (Authorization) エンドポイント URL、https://[tenant-id].logto.app/oidc/auth です。Logto アプリケーションページで「エンドポイントの詳細を表示」をクリックして URL を取得できます。 |
Userinfo Endpoint URL | あなたの Logto アプリケーションのユーザー情報エンドポイント URL、https://[tenant-id].logto.app/oidc/me です。 |
Token Validation Endpoint URL | あなたの Logto アプリケーションのトークン検証エンドポイント URL、https://[tenant-id].logto.app/oidc/token です。 |
End Session Endpoint URL | あなたの Logto アプリケーションのセッション終了エンドポイント URL、https://[tenant-id].logto.app/oidc/session/end です。 |
Identity Key | ユーザーのアイデンティティを含む ID トークン内の一意のキーで、設定に応じて email または sub にすることができます。 |
Nickname Key | ユーザーのニックネームを含む ID トークン内のキーで、sub に設定し、後で変更することができます。 |
チェックポイント:アプリケーションをテストする
今、あなたのアプリケーションをテストできます:
- WordPress サイトからログアウトします。
- WordPress のログインページにアクセスし、「Logto でサインイン」ボタンをクリックします。
- Logto のサインインページにリダイレクトされます。
- Logto アカウントでサインインします。
- WordPress サイトに戻り、自動的にログインされます。
ロールのマッピング
WordPress には、サイト上でユーザーが実行できるアクション(機能)を定義する組み込みのユーザーロール管理システムがあります。デフォルトのユーザーロールには、管理者、編集者、著者、寄稿者、購読者が含まれ、それぞれに独自の機能セットがあります。
Logto は、認可 (Authorization) モデルとしてロールベースのアクセス制御 (RBAC) を採用しており、「スコープ」を権限の最小単位として利用しています。これらのスコープは、認証 (Authentication) されたユーザーがアプリケーション内で実行できる特定のアクションを定義します。しかし、WordPress は、さまざまな機能をまとめた事前定義された「ロール」に依存してユーザーの権限を管理する異なる原則で動作します。
この基本的な違いを考慮して、WordPress で定義されたロールに対応する特別なロールを Logto 内に作成することをお勧めします。これらのロールにはスコープがないかもしれませんが、ユーザーを WordPress ロールにマッピングするための参照としてのみ使用されます。
前提条件
- WordPress のロールに対応する Logto 内のロールを設定します。たとえば、WordPress に「編集者」ロールがある場合、Logto に「group:editors」ロールを作成します。
ロールマッピングを実装する
ロールマッピングを実装するために、WordPress テーマの functions.php
ファイルにカスタムコードを追加します。これは、ユーザーがログインしたときにトリガーされる wp_login
アクションフックを使用します。設定方法のステップバイステップガイドを以下に示します:
ステップ 1: テーマの functions.php にアクセスする
テーマの functions.php
ファイルを開きます。このファイルには、WordPress サイトの機能を拡張するカスタム PHP 関数を追加できます。WordPress 管理パネルから外観 > テーマエディターに移動し、右側のファイルリストから functions.php
を選択してアクセスできます。または、ソースコードで WordPress テーマディレクトリに移動し、functions.php
ファイルを見つけます。
ステップ 2: ロールマッピング関数を書く
以下は、functions.php に追加する関数の簡単な例です。この関数は、ユーザーがログインするとトリガーされ、Logto から取得したユーザーの roles
クレームに基づいてロールを割り当てます。
function logto_handler($user_login, $user = null) {
if (!$user) {
$user = get_user_by('login', $user_login);
}
$oidc_claims = get_user_meta($user->ID, 'openid-connect-generic-last-user-claim', true);
if (in_array('group:editors', $oidc_claims['roles'])) {
$user->set_role('editor');
} else {
$user->set_role('subscriber');
}
}
add_action('wp_login', 'logto_handler', 10, 2);
ステップ 3: コードを理解しカスタマイズする
-
logto_handler
関数:この関数は、$user_login
(ユーザー名)と$user
(ユーザーオブジェクト)の 2 つのパラメーターを受け取ります。ユーザーメタにopenid-connect-generic-last-user-claim
として保存された Logto からのロールを取得し、このロールを対応する WordPress ロールにマッピングしてユーザーに割り当てます。 -
add_action
:この行は、logto_handler
関数をwp_login
アクションにフックします。これは、ユーザーがログインした後にトリガーされます。10
は優先度(デフォルト)で、2
は関数が受け入れる引数の数を示します。
上記の例では、Logto を介して認証 (Authentication) されたユーザーに group:editors
というロール名を持つ場合、'editor' ロールを割り当てます。しかし、実際のシナリオでは、より多くの種類のロールマッピングを実装する必要があるでしょう。
WordPress のロールとその機能のリストは こちら で確認できます。
ステップ 4: 設定をテストする
次に、Logto で group:editors
ロールを持つユーザーでログインして、ロールマッピング関数をテストします。ログイン後、WordPress でユーザーのロールを確認し、マッピングが正しく機能していることを確認します。