メインコンテンツまでスキップ

認証

Semaphore には、相手が誰であるかを確認する方法が 3 つあります。それぞれは独立しており、 すべてを同時に有効にできます。そのため、サインイン画面にはパスワード入力フォーム、 ディレクトリログイン、そして ID プロバイダーごとのボタンが並ぶことがあります。

方法パスワードを検証する主体適した場面
ローカルアカウントSemaphore が自身のデータベースを使って検証しますディレクトリがない場合や、緊急用の管理者が必要な場合。
LDAP と Active Directoryディレクトリサーバーユーザーがすでに LDAP や AD に存在し、資格情報を 1 つにまとめたい場合。
OpenID ConnectID プロバイダーシングルサインオンを利用している場合: Keycloak、Okta、Entra ID、Google、GitHub など。

認証が答えるのは、そのユーザーが誰かということだけです。何を行えるかは、サーバーロールと 各プロジェクトでのロールによって別途決まります。チームを参照してください。

ユーザーレコードが作成される仕組み

サインインするすべてのユーザーは、どの方法を使った場合でも Semaphore のデータベースに行を 持ちます。ローカルアカウントは管理者が作成するか、semaphore user add で作成されます。 LDAP または OIDC のアカウントは最初のサインイン成功時に作成され、Semaphore はそれと合わせて 外部アイデンティティ(プロバイダー ID と、そのプロバイダーが返したユーザー ID)を保存します。

以降のログインで照合されるのはこの外部アイデンティティです。そのため、ディレクトリ上で ユーザー名を変更しても 2 つ目のアカウントは作成されません。注意が必要なのは、既存ユーザーの 最初のログイン、つまり外部アイデンティティがまだ存在しない場合です。そのときの動作は external_auth_email_matching オプションで決まります。

動作
auto(デフォルト)メールアドレスで紐付けますが、対象はまだアイデンティティを持たない外部ユーザーのみです。これにより 2.20 より前に作成されたアカウントを一度だけ引き継ぎ、それ以外には作用しません。
alwaysすべての外部ユーザーをメールアドレスで紐付けます。1 人のユーザーが複数のプロバイダー経由でサインインする場合に使用します。
neverメールアドレスでは決して紐付けません。アイデンティティはプロバイダー ID のみで厳密に照合されます。

ローカルのパスワードアカウントは、どのモードでもメールアドレスで照合されることはありません。 そうでなければ、ユーザーが自分でメールアドレスを選べる OIDC プロバイダーを悪用して、 管理者のアカウントを乗っ取れてしまう可能性があります。

警告

プロバイダー ID(oidc_providers または ldap_providers 内のキー)は、保存されるすべての アイデンティティの一部です。これを変更すると、それを参照しているアイデンティティが孤立し、 該当ユーザーは次回のサインイン時に空の新しいアカウントを取得します。最初に決めたものを 変更しないでください。

方法を組み合わせる

現実的な構成では、ユーザー向けにシングルサインオンを有効にしつつ、ID プロバイダーに接続でき なくなった日のためにローカル管理者を 1 つ残しておきます。

  1. プロバイダーを設定し、実際のユーザーがそれ経由でサインインできることを確認します。
  2. そのユーザーに必要なロールを付与します。
  3. 強力なパスワードと TOTP を 有効にしたローカル管理者アカウントを 1 つ残します。
  4. password_login_disable を設定して、それ以外の全員がパスワードを使えないようにします。

この順序どおりに実施してください。手順 1 より前に password_login_disable を設定すると、 宣伝どおりに動作し、自分自身が自分のサーバーから締め出されます。

このセクションの内容

ページ扱う内容
ローカルアカウントパスワード、TOTP、メールのワンタイムコード、セッションの有効期間、パスワードログインの無効化。
LDAP と Active Directoryディレクトリへのバインド、検索フィルター、属性マッピング、TLS。
OpenID Connectプロバイダーの設定、クレーム式、IdP 起点のログイン、12 種類のプロバイダー設定例。

どこから始めるか

新規インストールではセットアップ時に作成されたローカル管理者がすでに存在します。まずは ローカルアカウントから始めてそのアカウントを保護し、 続いてそれ以外のユーザー向けに OpenID Connect または LDAP を追加してください。