Logto の実践: Apache Answer をシームレスに統合してユーザーのためのコミュニティを構築する

> 本記事は元々 [blog.logto.io](https://blog.logto.io/ja/logto-apache-answer) に掲載されたものです。

優れたソフトウェア製品を構築することは大きな成果ですが、それは本当に旅の始まりに過ぎません。

アプリケーションの長期的な成功と進化は、そのユーザーを理解し、関与することに大きく依存しており、それはフィードバックを収集し、痛点を特定し、質問に答え、問題を解決することを含んでいます——これは反復と改善を促進する重要なサイクルです。

この記事では、次のことを行います:
- Logto のサードパーティアプリケーション（OIDC）機能の仕組みを説明します。
- [Apache Answer](https://answer.apache.org/) を Logto を使用して統合し、ユーザーが質問をしたり、アイデアを共有したり、チームや他のユーザーからヘルプを得ることができるコミュニティを構築する方法を紹介します。

Logto を使用する際のハイライトは、ユーザーが自分のシステムのアカウントと同じアカウントでコミュニティにサインインすることです。これにより、質問しているユーザーの現在の状況を容易に把握でき、彼らのソフトウェアでの状況を問い合わせるために多数のやり取りをする必要がなくなります。

## Apache Answer とは

![apache-answer.png](https://uploads.strapi.logto.io/apache_answer_271f2ba777.png)

[Apache Answer](https://answer.apache.org/) は、ユーザーとチームを結びつけるオープンソースの Q&A プラットフォームです。知識を共有し、一緒に問題を解決するためのスペースを作ります。このプラットフォームは、リアルタイムの Markdown プレビュー、高度な検索、コンテンツの投票システムを備えています。

プラットフォームは、OAuth 2.0 ログインを標準でサポートします。これは、Logto のような既存の ID プロバイダーと自然に互換性があることを意味します。ユーザーは、コミュニティプラットフォーム用に新しい資格情報を作成することなく、既存のアカウントでサインインできます。

## Logto のサードパーティアプリケーション機能の理解

Logto のアカウントを使用してサードパーティアプリケーションにユーザーをログインさせたいときは、Logto があなたのアプリケーションの ID プロバイダー（IdP）として機能します。

それはあなたのユーザーが誰であるかを確認する中枢の権威として考えてみてください。ユーザーがメインのアプリケーションにログインすると、次のプロセスを処理するためにおそらく Logto にリダイレクトされます（ユーザー名/パスワード、ソーシャルログインなど）。Logto がユーザーを正常に確認すると、「はい、このユーザーは正当です」とアプリケーションに知らせ、彼らの基本的な情報を提供します。

この概念は、単なるプライマリアプリケーションを超えて広がります。Logto は強力な機能を包含しています——**サードパーティアプリケーション**。この機能を使えば、Logto は、自分のアプリケーションだけでなく、ユーザーがアクセスしたい *他の* 外部アプリケーションの IdP 役割も果たすことができます。

これを実現するために **OpenID Connect (OIDC)** が使われます。これは OAuth 2.0 プロトコルの上に構築された標準のアイデンティティレイヤーです。簡単に言うと、OIDC はあるアプリケーション（Apache Answer のような、リライングパーティまたはクライアント）がユーザーの IdP（Logto）からユーザーのアイデンティティの情報を要求し、受け取ることを可能にします。

Logto に Apache Answer の OIDC アプリケーションを設定するとき、あなたは基本的に Logto に「Apache Answer の代わりにユーザーを認証する準備をして、ユーザーが承認すれば、Answer に基本的なユーザーアイデンティティ情報を安全に送信せよ」と伝えます。この機能は、Logto 認証されているアプリケーションと Apache Answer のようなサードパーティツール間のシームレスなシングルサインオン（SSO）を解く鍵です。

## シナリオ設定: YourApp + Logto + Apache Answer

設定を始める前に、シナリオで関係するコンポーネントを明確にしておきましょう:

1. **YourApp:** これはユーザーが既に登録およびログインしているプライマリウェブまたはモバイルアプリケーションです。重要なのは、YourApp が認証のために Logto と統合されていることです。
2. **Logto:** 中央 IAM プラットフォームとして機能し、IdP としても動作します。ユーザーアカウントは Logto によって管理されています。
3. **Apache Answer:** YourApp のユーザーのためのコミュニティハブとして展開したいオープンソースの Q&A プラットフォーム。Answer をその独自のローカルユーザー名/パスワードシステムの代わりに Logto を使用してログインを行うように設定することが私たちの目標です。

## ハンズオン: Logto と Apache Answer の設定

さあ、実際に手を動かしましょう。このプロセスは、Logto と Apache Answer の両方での設定を含みます。

### Apache Answer のインストール

[公式インストールガイド](https://answer.apache.org/docs/installation)に従い、Apache Answer をインストールします。そして、デフォルトで `http://localhost:9080` でアクセスできるようになります。

### Logto に OIDC アプリケーションを作成

1. Logto コンソールにサインインします。
2. アプリケーションページに移動します。
3. ページの右上隅にある **"Create application"** ボタンをクリックします（このボタンが見えない場合は、フレームワークリストの下部にある "view all" をクリックしてください）。
4. **"Third party application"** カテゴリを選択し、次に **"OIDC"** を選択します。
5. アプリケーション名（例：「Apache Answer Community」）と説明（任意）を入力します。
6. **"Create"** をクリックして作成を完了します。アプリケーションを作成した後、アプリケーションの詳細ページにリダイレクトされます。
7. 詳細ページで `http://localhost:9080/answer/api/v1/connector/redirect/basic` を **Redirect URI** フィールドに追加します。
8. **"Save"** をクリックしてアプリケーションを保存します。

### Apache Answer 用の権限を設定

1. アプリケーション詳細ページで、**Permissions** タブに移動します。
2. **Grant permissions of user data** の下に「まだユーザーデータの権限を設定していません。」というメッセージが表示されます。
3. Apache Answer がアクセスできるユーザー情報を設定するために、**Add** ボタンをクリックします。
4. 必要なスコープ（`profile` と `email`）を選択し、ログイン時に Apache Answer が基本的なユーザー情報を受け取れるようにします。
5. 権限設定を保存します。

![logto-grant-permissions.png](https://uploads.strapi.logto.io/logto_grant_permissions_274ce9d70f.png)

### Apache Answer での OAuth ログインの設定

1. 管理アカウントを使用して Apache Answer にログインします。
2. `http://localhost:9080/admin` で **Admin** ダッシュボードにアクセスします。
3. **Plugins -> Installed Plugins** に移動し、**OAuth2 Basic** プラグインをアクティブにします。
4. **OAuth2 Basic** プラグインページに移動します。
5. Logto で作成したサードパーティアプリケーションに基づいて、以下の情報を入力します:
    * **Name**: ログインページに表示されるコネクタの名前
    * **Client ID**: アプリケーション詳細ページの「App ID」。
    * **Client Secret**: 詳細ページの「Endpoints & Credentials」セクションの「App Secret」。
    * **Authorize URL**: 詳細ページの「Endpoints & Credentials」セクションの「Authorization endpoint」。
    * **Token URL**: 詳細ページの「Endpoints & Credentials」セクションの「Token endpoint」。
    * **User JSON URL**: 詳細ページの「Endpoints & Credentials」セクションの「Userinfo endpoint」。
    * **User ID JSON Path**: `sub`。
    * **User Display Name JSON Path**: `name`。
    * **User Username JSON Path**: `username`。
    * **User Email JSON Path**: `email`。
    * **User Avatar JSON Path**: `picture`。
    * **User Email Verified JSON Path**: `email_verified`。
    * **Scopes**: `openid,profile,email`。
6. Apache Answer のプラグイン設定を**保存**します。

注意: `openid` スコープを含めることを忘れないでください。これは、OIDC 標準が User JSON URL からユーザー情報を取得するために要求するものです。Logto のサードパーティアプリケーションは OIDC に基づいて実装されている一方で、Apache Answer のプラグインは OAuth 2.0 を使用しているため、このスコープは両システム間での適切な認証フローを確保するために必要です。

## チェックポイント: 統合のテスト

Logto と Apache Answer の両方が設定されたら、シームレスなユーザーエクスペリエンスを確認してみましょう:

1. Apache Answer にアクセスし、ログインページに「Connect with Logto」ボタンが表示されているのを確認します。

![connect-with-logto.png](https://uploads.strapi.logto.io/connect_with_logto_fa9248092c.png)

2. ボタンをクリックすると、Logto のログインページにリダイレクトされます。

3. 「Connect with Logto」ボタンをクリックした後、既存のアカウントでログインできる Logto にリダイレクトされます。その後、Apache Answer に情報を共有する許可を求める同意ページが表示されます。

![consent-page.png](https://uploads.strapi.logto.io/consent_page_cf98766413.png)

4. 許可を承認すると、Apache Answer に再度リダイレクトされ、ログインされていることがわかります！

![answer-dashboard.png](https://uploads.strapi.logto.io/answer_dashboard_38e17dbffe.png)

注意: Apache Answer はログインしたユーザーが確認済みメールを持っているかどうかを確認します。ユーザーがメール情報を持っていない場合、Apache Answer は確認のためのメールを提供するよう求めます。

## 統合のメリット要約

なぜこれらのステップを踏むのでしょうか？利点は significant です:

* **ユーザーエクスペリエンス:** これが最も明確な利点です。ユーザーは別の資格情報セットを作成または覚える必要がありません。彼らがすでに信頼するログインを使用することで、コミュニティへのスムーズで摩擦のないエントリーが可能になります。これにより、参加へのハードルが劇的に下がります。
* **開発効率:** Apache Answer 内での個別のユーザー認証、登録、パスワードリセットフローなどを構築および維持する必要が完全になくなります。既存の Logto ユーザーベースを即座に活用し、コミュニティをはるかに早くローンチすることができます。
* **セキュリティ:** 認証は専用の IAM プロバイダーである Logto に委ねられ、多要素認証 (MFA)、パスワードポリシー、ブルートフォース攻撃の保護など、Answer 内でのカスタム実装よりもおそらくより堅牢にセキュリティ面を処理します。成熟したよくテストされた OIDC 標準に依存しています。
* **製品価値とサポート効率:** ユーザーアイデンティティを分断することなく、即座に価値のあるコミュニティ機能を追加します。前述のように、コミュニティユーザーが*製品ユーザーと同じ*であることを知ることで、サポートチームはよりコンテキスト豊かで効率的なヘルプを提供し、ユーザーの満足度とエンゲージメントを高めます。

## 結論

サードパーティツールの統合は、リッチなアプリケーションエコシステムを構築するために不可欠ですが、これらのツール間でのユーザーアイデンティティの管理は大きな面倒です。Apache Answer で示したように、Logto のサードパーティアプリケーション（OIDC）機能は、このギャップを橋渡しする強力で標準的な方法を提供します。

Logto を Apache Answer の中央 ID プロバイダーとして設定することで、既存ユーザーのための専用コミュニティスペースを効果的に**"ワンクリック"**で有効化し、シームレスなログインエクスペリエンスを提供し、あなたのチームに統一されたユーザーアイデンティティのメリットを提供できます。

さらにエキサイティングなのは、このパターンが Q&A プラットフォームに限定されず、分析ダッシュボード、プロジェクト管理ツール、内部ユーティリティ、その他多数のアプリケーションに適用できることです。ユーザーに優れたソフトウェアエコシステムを構築できます。

将来の記事では、Logto を利用して他の便利なツールを統合する方法を探るかもしれませんので、ぜひご期待ください！