メインコンテンツまでスキップ
新しい友達のために:

Logto は、モダンなアプリや SaaS 製品向けに設計された Auth0 の代替です。 Cloudオープンソース の両方のサービスを提供し、アイデンティティと管理 (IAM) システムを迅速に立ち上げるのに役立ちます。認証 (Authentication)、認可 (Authorization)、マルチテナント管理を すべて一つに まとめて楽しんでください。

Logto Cloud で無料の開発テナントから始めることをお勧めします。これにより、すべての機能を簡単に探索できます。

この記事では、Chrome extensionLogto を使用して、Aliyun Direct Mail サインイン体験(ユーザー認証 (Authentication))を迅速に構築する手順を説明します。

前提条件

  • 稼働中の Logto インスタンス。紹介ページ をチェックして始めてください。
  • Chrome extension の基本的な知識。
  • 使用可能な Aliyun Direct Mail アカウント。

Logto にアプリケーションを作成する

Logto は OpenID Connect (OIDC) 認証 (Authentication) と OAuth 2.0 認可 (Authorization) に基づいています。これは、複数のアプリケーション間でのフェデレーテッドアイデンティティ管理をサポートし、一般的にシングルサインオン (SSO) と呼ばれます。

あなたの シングルページアプリケーション アプリケーションを作成するには、次の手順に従ってください:

  1. Logto コンソール を開きます。「Get started」セクションで、「View all」リンクをクリックしてアプリケーションフレームワークのリストを開きます。あるいは、Logto Console > Applications に移動し、「Create application」ボタンをクリックします。 Get started
  2. 開いたモーダルで、左側のクイックフィルターチェックボックスを使用して、利用可能なすべての "シングルページアプリケーション" フレームワークをフィルタリングするか、"シングルページアプリケーション" セクションをクリックします。"Chrome extension" フレームワークカードをクリックして、アプリケーションの作成を開始します。 Frameworks
  3. アプリケーション名を入力します。例:「Bookstore」と入力し、「Create application」をクリックします。

🎉 タダーン!Logto で最初のアプリケーションを作成しました。詳細な統合ガイドを含むお祝いページが表示されます。ガイドに従って、アプリケーションでの体験を確認してください。

Logto SDK を統合する

ヒント:
  • 以下のデモは Chrome v123.0.6312.87 (arm64) でテストされました。他のバージョンでも、SDK で使用されている chrome API をサポートしていれば動作するはずです。
  • サンプルプロジェクトは、私たちの GitHub リポジトリ で利用可能です。

インストール

npm i @logto/chrome-extension

認証 (Authentication) フロー

Chrome 拡張機能のポップアップに「サインイン」ボタンを配置したと仮定すると、認証 (Authentication) フローは次のようになります:

拡張機能内の他のインタラクティブなページについては、拡張機能ポップアップ の参加者をページ名に置き換えるだけです。このチュートリアルでは、ポップアップページに焦点を当てます。

リダイレクトベースのサインインについて

  1. この認証 (Authentication) プロセスは OpenID Connect (OIDC) プロトコルに従い、Logto はユーザーのサインインを保護するために厳格なセキュリティ対策を講じています。
  2. 複数のアプリがある場合、同じアイデンティティプロバイダー (Logto) を使用できます。ユーザーがあるアプリにサインインすると、Logto は別のアプリにアクセスした際に自動的にサインインプロセスを完了します。

リダイレクトベースのサインインの理論と利点について詳しく知るには、Logto サインイン体験の説明を参照してください。

manifest.json を更新する

Logto SDK は manifest.json に次の権限を必要とします:

manifest.json
{
"permissions": ["identity", "storage"],
"host_permissions": ["https://*.logto.app/*"]
}
  • permissions.identity: Chrome Identity API に必要で、サインインとサインアウトに使用されます。
  • permissions.storage: ユーザーのセッションを保存するために必要です。
  • host_permissions: Logto SDK が Logto API と通信するために必要です。
注記:

Logto Cloud でカスタムドメインを使用している場合は、host_permissions をドメインに合わせて更新する必要があります。

バックグラウンドスクリプト(サービスワーカー)を設定する

Chrome 拡張機能のバックグラウンドスクリプトで、Logto SDK を初期化します:

service-worker.js
import LogtoClient from '@logto/chrome-extension';

export const logtoClient = new LogtoClient({
endpoint: '<your-logto-endpoint>'
appId: '<your-logto-app-id>',
});

<your-logto-endpoint><your-logto-app-id> を実際の値に置き換えてください。これらの値は、Logto コンソールで作成したアプリケーションページで見つけることができます。

バックグラウンドスクリプトがない場合は、公式ガイド に従って作成できます。

備考:

なぜバックグラウンドスクリプトが必要なのか?

ポップアップやオプションページのような通常の拡張機能ページはバックグラウンドで実行できず、認証 (Authentication) プロセス中に閉じられる可能性があります。バックグラウンドスクリプトは、認証 (Authentication) プロセスが適切に処理されることを保証します。

次に、他の拡張機能ページからのメッセージをリッスンし、認証 (Authentication) プロセスを処理する必要があります:

service-worker.js
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// 以下のコードでは、各アクションに対して `true` を返すため、`sendResponse` を呼び出して
// 送信者に通知する必要があります。ここでエラーを処理したり、他の方法で送信者に通知することもできます。

if (message.action === 'signIn') {
const redirectUri = chrome.identity.getRedirectURL('/callback');
logtoClient.signIn(redirectUri).finally(sendResponse);
return true;
}

if (message.action === 'signOut') {
const redirectUri = chrome.identity.getRedirectURL();
logtoClient.signOut(redirectUri).finally(sendResponse);
return true;
}

return false;
});

上記のコードでは、2 つのリダイレクト URI が使用されていることに気付くかもしれません。これらはどちらも chrome.identity.getRedirectURL によって作成され、認証 (Authentication) フローのためのリダイレクト URL を生成するための Chrome の組み込み API です。2 つの URI は次のようになります:

  • サインイン用:https://<extension-id>.chromiumapp.org/callback
  • サインアウト用:https://<extension-id>.chromiumapp.org/

これらの URI はアクセスできず、Chrome が認証 (Authentication) プロセスの特定のアクションをトリガーするためにのみ使用されます。

Logto アプリケーション設定を更新する

次に、作成したリダイレクト URI を許可するために Logto アプリケーション設定を更新する必要があります。

  1. Logto コンソールのアプリケーションページに移動します。
  2. 「リダイレクト URI」セクションで、URI を追加します:https://<extension-id>.chromiumapp.org/callback
  3. 「サインアウト後のリダイレクト URI」セクションで、URI を追加します:https://<extension-id>.chromiumapp.org/
  4. 「CORS 許可されたオリジン」セクションで、URI を追加します:chrome-extension://<extension-id>。Chrome 拡張機能の SDK は、このオリジンを使用して Logto API と通信します。
  5. 変更を保存 をクリックします。

<extension-id> を実際の拡張機能 ID に置き換えることを忘れないでください。拡張機能 ID は chrome://extensions ページで見つけることができます。

ポップアップにサインインとサインアウトボタンを追加する

もう少しです!ポップアップページにサインインとサインアウトボタン、およびその他の必要なロジックを追加しましょう。

popup.html ファイルで:

popup.html
<button id="sign-in">Sign in</button> <button id="sign-out">Sign out</button>

popup.js ファイルで(popup.jspopup.html に含まれていると仮定):

popup.js
document.getElementById('sign-in').addEventListener('click', async () => {
await chrome.runtime.sendMessage({ action: 'signIn' });
// サインインが完了(または失敗)したら、ここで UI を更新できます。
});

document.getElementById('sign-out').addEventListener('click', async () => {
await chrome.runtime.sendMessage({ action: 'signOut' });
// サインアウトが完了(または失敗)したら、ここで UI を更新できます。
});

チェックポイント:認証 (Authentication) フローをテストする

Chrome 拡張機能で認証 (Authentication) フローをテストできます:

  1. 拡張機能のポップアップを開きます。
  2. 「サインイン」ボタンをクリックします。
  3. Logto サインインページにリダイレクトされます。
  4. Logto アカウントでサインインします。
  5. Chrome に戻ります。

認証 (Authentication) 状態を確認する

Chrome は統一されたストレージ API を提供しているため、サインインとサインアウトフロー以外のすべての Logto SDK メソッドはポップアップページで直接使用できます。

popup.js で、バックグラウンドスクリプトで作成した LogtoClient インスタンスを再利用するか、同じ構成で新しいものを作成できます:

popup.js
import LogtoClient from '@logto/chrome-extension';

const logtoClient = new LogtoClient({
endpoint: '<your-logto-endpoint>'
appId: '<your-logto-app-id>',
});

// または、バックグラウンドスクリプトで作成した logtoClient インスタンスを再利用
import { logtoClient } from './service-worker.js';

次に、認証 (Authentication) 状態とユーザーのプロファイルを読み込む関数を作成できます:

popup.js
const loadAuthenticationState = async () => {
const isAuthenticated = await logtoClient.isAuthenticated();
// 認証 (Authentication) 状態に基づいて UI を更新

if (isAuthenticated) {
const user = await logtoClient.getIdTokenClaims(); // { sub: '...', email: '...', ... }
// ユーザーのプロファイルで UI を更新
}
};

loadAuthenticationState 関数をサインインとサインアウトのロジックと組み合わせることもできます:

popup.js
document.getElementById('sign-in').addEventListener('click', async () => {
await chrome.runtime.sendMessage({ action: 'signIn' });
await loadAuthenticationState();
});

document.getElementById('sign-out').addEventListener('click', async () => {
await chrome.runtime.sendMessage({ action: 'signOut' });
await loadAuthenticationState();
});

認証 (Authentication) 状態を持つポップアップページの例はこちらです:

ポップアップページ

その他の考慮事項

  • サービスワーカーバンドリング:Webpack や Rollup などのバンドラーを使用する場合、Node.js モジュールの不要なバンドリングを避けるために、ターゲットを browser または同様に明示的に設定する必要があります。
  • モジュール解決:Logto Chrome 拡張機能 SDK は ESM のみのモジュールです。

TypeScript、Rollup、その他の設定を含む完全な例については、サンプルプロジェクト を参照してください。

Aliyun Direct Mail コネクターを追加する

Email コネクターは、認証 (Authentication) のためにワンタイムパスワード (OTP) を送信するための方法です。これは、Email ベースの登録、サインイン、二要素認証 (2FA)、アカウント回復を含むパスワードレス認証 (Authentication) をサポートするために メールアドレス の確認を可能にします。 Logto の Email コネクターを使用すると、数分でこれを設定できます。

Email コネクターを追加するには、次の手順に従ってください:

  1. Console > Connector > Email and SMS connectors に移動します。
  2. 新しい Email コネクターを追加するには、「Set up」ボタンをクリックし、「Aliyun Direct Mail」を選択します。
  3. 選択したプロバイダーの README ドキュメントを確認します。
  4. 「Parameter Configuration」セクションで設定フィールドを完了します。
  5. JSON エディターを使用して Email テンプレートをカスタマイズします。
  6. メールアドレス に確認コードを送信して設定をテストします。
Connector tab
注記:

インプレースコネクターガイドに従っている場合は、次のセクションをスキップできます。

Aliyun email connector を設定する

Aliyun DirectMail コンソールでメールサービスを設定する

Aliyun アカウントを作成する

Aliyun にアクセスし、まだアカウントをお持ちでない場合は Aliyun アカウントを作成してください。

Aliyun Direct Mail を有効化・設定する

DM サービスコンソールページ にアクセスし、サインインします。ページ左上の「申請開通 (Apply to enable)」ボタンをクリックして Direct Mail サービスを有効化し、設定を開始します。

DM 管理コンソールページ から、次の手順を行います:

  1. サイドバーの「発信域名 (Email Domains)」に移動し、案内に従って「新建域名 (New Domain)」を追加します。
  2. 「発信地址 (Sender Addresses)」および「邮件标签 (Email Tags)」をそれぞれカスタマイズします。

セットアップが完了したら、テスト方法は 2 つあります:

  • DirectMail 概要ページ にアクセスし、ページ下部の「操作引导 (Operation Guide)」を見つけ、「发送邮件 (Send Emails)」をクリックします。さまざまなテスト方法が確認できます。
  • サイドバーの「发送邮件 (Send Emails)」→「发送邮件 (Email Tasks)」の順に進み、テストタスクを作成します。

コネクター JSON を作成する

  1. DM 管理コンソールページ で、右上のアバターにカーソルを合わせて「AccessKey 管理 (AccessKey Management)」に進み、「创建 AccessKey (Create AccessKey)」をクリックします。セキュリティ認証が完了すると「AccessKey ID」と「AccessKey Secret」のペアが取得できます。大切に保管してください。
  2. 先ほどアクセスした「发信地址 (Sender Addresses)」または「邮件标签 (Email Tags)」タブで、Sender Address または Email Tag を簡単に確認できます。
  3. Aliyun DM コネクターの設定を入力します:
    • accessKeyId および accessKeySecret フィールドには、手順 1 で取得したアクセスキーのペアを入力します。
    • accountName および fromAlias フィールドには、手順 2 で確認した「Sender Address」と「Email Tag」を入力します。すべてのテンプレートでこの署名名を共有します。(fromAlias は任意なので空欄でも構いません。)
    • 異なるケースごとに複数の DM コネクターテンプレートを追加できます。単一テンプレートを追加する例は以下の通りです:
      • subject フィールドには、送信メールのタイトルとなる内容を入力します。
      • content フィールドには任意の文字列型コンテンツを入力します。ランダム認証コード用の {{code}} プレースホルダーを忘れずに残してください。
      • usageType フィールドには、用途に応じて RegisterSignInForgotPasswordGeneric のいずれかを入力します。(usageType は適切なユースケースを識別するための Logto プロパティです。)すべてのユーザーフローを有効にするには、RegisterSignInForgotPasswordGeneric の usageType を持つテンプレートが必要です。

Aliyun DM コネクターのテスト

「保存して完了」する前に、メールアドレスを入力して「送信」をクリックし、設定が機能するかどうかを確認できます。

以上です。サインイン体験でコネクターを有効化 するのをお忘れなく。

設定タイプ

名前
accessKeyIdstring
accessKeySecretstring
accountNamestring
fromAliasstring (OPTIONAL)
templatesTemplate[]
テンプレートプロパティ列挙値
subjectstringN/A
contentstringN/A
usageTypeenum string'Register' / 'SignIn' / 'ForgotPassword' / 'Generic'

設定を保存する

Logto コネクター設定エリアで必要な値をすべて記入したことを確認してください。「保存して完了」または「変更を保存」をクリックすると、Aliyun Direct Mail コネクターが利用可能になります。

サインイン体験で Aliyun Direct Mail コネクターを有効にする

コネクターを正常に作成したら、電話番号ベースのパスワードレスログインと登録を有効にできます。

  1. コンソール > サインイン体験 > サインアップとサインイン に移動します。
  2. サインアップ方法を設定します(オプション):
    1. サインアップ識別子として "メールアドレス" または "Email or phone number" を選択します。
    2. "Verify at sign-up" は強制的に有効化されます。登録時に "Create a password" を有効にすることもできます。
  3. サインイン方法を設定します:
    1. サインイン識別子の一つとして メールアドレス を選択します。複数の利用可能な識別子(メール、電話番号、ユーザー名)を提供できます。
    2. 認証 (Authentication) 要素として "Verification code" および / または "Password" を選択します。
  4. "Save changes" をクリックし、"Live preview" でテストします。
Sign-in Experience tab

OTP を使用した登録とログインに加えて、パスワードの回復や ベースのセキュリティ検証を有効にし、メールアドレス をプロファイルにリンクすることもできます。詳細については、エンドユーザーフロー を参照してください。

テストと検証

Chrome extension アプリに戻ります。これで Aliyun Direct Mail を使用してサインインできるはずです。お楽しみください!

さらなる読み物

エンドユーザーフロー:Logto は、MFA やエンタープライズシングルサインオン (SSO) を含む即時使用可能な認証 (Authentication) フローを提供し、アカウント設定、セキュリティ検証、マルチテナント体験の柔軟な実装のための強力な API を備えています。

認可 (Authorization):認可 (Authorization) は、ユーザーが認証 (Authentication) された後に行えるアクションやアクセスできるリソースを定義します。ネイティブおよびシングルページアプリケーションの API を保護し、ロールベースのアクセス制御 (RBAC) を実装する方法を探ります。

組織 (Organizations):特にマルチテナント SaaS や B2B アプリで効果的な組織機能は、テナントの作成、メンバー管理、組織レベルの RBAC、およびジャストインタイムプロビジョニングを可能にします。

顧客 IAM シリーズ:顧客(または消費者)アイデンティティとアクセス管理に関する連続ブログ投稿で、101 から高度なトピックまでを網羅しています。