👓

mattermostでOAuth 2.0認証機能(OIDC)を外部アプリに提供する

2024/04/18に公開

はじめに

outline wikiを構築する上で、独自認証機能がなく、
外部のOIDC認証機能を利用する必要があったので
mattermostのOAuth 2.0認証機能を利用してみました。
ざっくり言うと「googleアカウントでログイン」的なやつです。

outline

このOSSナレッジツールの認証に利用しています。
https://www.getoutline.com/

mattermost

このOSSのコミュニケーションツール(slackクローン)の機能で
OAuth 2.0認証機能(OIDC)を提供します。
https://mattermost.com/

OAuth 2.0認証機能作成方法

以下にまとめていきます。

システムコンソール

メインメニュー > システムコンソールからシステムコンソール画面を開いて、
システムコンソール > 統合機能管理 > OAuth 2.0サービスプロバイダーを有効にする の設定を有効にします

統合機能

メインメニュー > 統合機能から統合機能の画面を開いて、
OAuth 2.0アプリケーションを選択します。

OAuth 2.0アプリケーションを追加するを選択します。

必要情報を入力して、「保存」します

設定項目

信頼済み

「はい」に設定すると、アプリケーションは Mattermost によって信頼されていると見なされます。
これは、Mattermost がサードパーティ アプリケーションに署名するときに
ユーザーが承認を受け入れる必要がないことを意味します。
「いいえ」に設定すると、ユーザーの初回認証時に承認を受け入れるか拒否するためのページが表示されます。

表示名

アプリケーションの名前を 64 文字以内で入力します。
アプリケーションへのアクセスを許可するとき、
[設定] > [セキュリティ] > [OAuth 2.0 アプリケーション]で
許可されたアプリケーションのリストを表示するとき、
および[統合]メニューで OAuth 2.0 アプリケーションのリストを表示するときにユーザーに表示される名前です。

説明

ユーザーが[設定] > [セキュリティ] > [OAuth 2.0 アプリケーション]で
承認されたアプリケーションのリストを表示するときに表示されるアプリケーションの短い説明です。

ホームページ

OAuth 2.0 アプリケーションのホームページです。つまりは説明用のページです。
ユーザーはアプリ ページにアクセスしてアプリケーションの機能の詳細を確認できます。
URL は有効な URL である必要があり、
サーバー構成に応じてhttp://またはhttps://で始まる必要があります。
あくまで機能詳細への導線であり、mattermostのOAuth 2.0認証を利用したいサイトでなくてもよいので気をつけてください。

アイコンのURL

オプションです。なくてもかまいません。
ユーザーが[設定] > [セキュリティ] > [OAuth 2.0 アプリケーション]で承認されたアプリケーションのリストを表示するとき、
および[統合]メニューで OAuth 2.0 アプリケーションのリストを表示するときに表示される画像です。
有効な URL であり、http://またはhttps://で始まる必要があります。

コールバックURL

アプリケーションの承認を、承認または拒否した後に
MattermostがユーザーをリダイレクトするURLです。
承認コードまたはアクセス トークンを処理する唯一のURLになります。
複数のURLが指定された場合、ユーザーはアプリの最初の認証に使用された URL にリダイレクトされます。
各URLは個別の行に記述し、 http://またはhttps://で始まる必要があります。

outlineではこんな感じになります

https://XXX.com(outlineサーバのドメイン)/auth/oidc.callback

完成

これで作成されました

利用側設定

認証に利用する側アプリやサイトで設定するmattermostのエンドポイントは以下の通りです。

OAuth エンドポイント

承認URI

/oauth/authorize

トークンURI

/oauth/access_token

ユーザー情報URI

/api/v4/users/me

例) outlineのケース

例えば以下のように利用側アプリやサイトのコンフィグなどで設定します。
利用するアプリケーションによって設定方法は異なると思いますので、
詳細は利用アプリやサイトのドキュメントを参照してください。

OIDC_AUTH_URI=https://XXX.net(mattermostサーバのドメイン)/oauth/authorize
OIDC_TOKEN_URI=https://XXX.net(mattermostサーバのドメイン)/oauth/access_token
OIDC_USERINFO_URI=https://XXX.net(mattermostサーバのドメイン)/api/v4/users/me

Discussion