本文へ移動
ドキュメント · ワークスペース、発行者、トークン

基本概念

Usherのほぼすべては、いくつかの考え方で説明できます。どこに何があるのか、誰がトークンを発行するのか、ユーザーはどこでサインインするのか、そして各トークンはどれくらい有効なのか、です。

ワークスペース、プロジェクト、環境

  • ワークスペースは、Usher Consoleにおけるあなたのチームや会社です。メンバーと監査ログは、ワークスペースに属します。
  • プロジェクトは、ひとつの製品です。たとえばWebアプリや、パートナーポータルです。ひとつのワークスペースに、いくつものプロジェクトを置けます。
  • 環境は、プロジェクトを実際に動かすひとつのコピーで、通常は開発環境と本番環境です。ユーザー、アプリケーション、鍵、設定は、環境の中にあります。

ワークスペース · Acme Ltd

プロジェクト · Web

  • development · wise-otter-42
  • production · acme

プロジェクト · パートナーポータル

  • development · calm-heron-17
  • production · acme-partners
それぞれの環境が独立した発行者で、専用のユーザー、鍵、Lobbyを持ちます。

環境どうしは、重要なものを何も共有しません。それぞれが専用のPostgresスキーマ、専用の署名鍵、そして専用のデータキーで封印された専用のシークレットを持っています。開発環境で新規登録したユーザーは本番環境には存在せず、一方の環境のトークンを、もう一方の環境の鍵で検証できることもありません。

ワークスペースの管理者は、プロジェクトの「概要」の最後で、プロジェクト名を入力したうえで、そのプロジェクトを削除できます。プロジェクト内のすべての環境が一度に削除されます。ユーザー、アプリケーション、鍵、設定、そしてその環境が発行したすべてのセッションとトークンです。プロジェクトのアドレスは応答しなくなり、再び割り当てられることもありません。そのため、まだそのアドレスを信頼しているアプリが、他人のプロジェクトにだまされることはありません。

発行者

各環境は独立したOpenID Connectの発行者(issuer)で、テナントドメイン上に専用のホストを持ちます。

発行者
https://<handle>.usherid.com
  • 本番環境には、自分で選んだハンドルが付きます。英小文字、数字、連続しないハイフンからなる3〜32文字で、たとえば会社名などです。一度使われたハンドルが再び割り当てられることはありません。
  • 開発環境には、wise-otter-42のようなランダムなハンドルが付きます。ブランドと間違えられることはありません。

発行者は、環境の作成時に固定されます。その環境が署名するすべてのトークンはissでその発行者を名乗り、その環境を信頼するすべてのアプリがその値を確認するからです。

テナントドメインは、Usher自身のドメイン(usheridentity.com)とは異なる登録可能ドメインです。そのため、顧客のサインインページがUsher Consoleと同一サイトになることはありません。また、Cookieはホスト限定なので、ブラウザーはある環境のCookieをその環境だけに送ります。

Lobby

Lobbyは、各環境が発行者のアドレスでホストするサインインページです。アプリがユーザーをそこへ送ると、Lobbyがサインインを済ませ、ユーザーをアプリへ送り返します。

  • 行き先のアプリ名を、「〇〇に進みます」という表示で必ず示します。
  • 環境で許可された方法だけを提示します。パスキー、メールで届くコード、マジックリンク、ソーシャルアカウント(Google、GitHub、Microsoft、Apple)、パスワードです。
  • 2段階認証を必須にできます。2段階目には、認証アプリ(バックアップコード付き)かパスキーを使います。
  • 誰でも利用できるようにするか、アドレスやドメインのゲストリストで限定するかを選べます。

どの製品から来たユーザーにも、同じ見た目で表示されます。これは意図的なものです。ユーザーは本物のLobbyの見た目を覚え、そうでないページに気づけるようになります。

Usherアカウント

ほとんどの環境は、専用のユーザーを持っています。Usherアカウントはそれとは異なり、「Usherで続ける」を提供するすべてのアプリに、ひとつのアカウントでサインインできるものです。ユーザーは自分のアカウントをaccount.usheridentity.comで管理します。

トークンと有効期間

トークンデフォルト設定できる範囲用途
認可コード5分固定トークンとの交換に一度だけ使います。一回限りです。
IDトークン10分1〜60分誰がサインインしたかをアプリに伝えます。APIの呼び出しには使いません。
アクセストークン10分1〜60分APIに送られ、APIがそれを検証します。
リフレッシュトークン30日1〜90日新しいアクセストークンを取得します。使うたびにローテーションされます。offline_accessが必要です。
マシン用アクセストークン15分1〜60分client_credentials用。背後に人がいないサーバーのためのものです。
メールで届くコード、マジックリンク10分固定1回のサインインに使います。コードは3回まで試せます。

Lobbyのセッションにも有効期間があります。使われないまま7日(1〜30日)が経つと終了し、使われていても合計30日(1〜90日)で終了します。メールアドレスなどの重要な情報を変更するには、10分以内にサインインしている必要があります。

署名鍵

トークンは、デフォルトでRS256で署名されます。代わりにES256やEdDSAを使うように環境を設定することもできます。公開鍵は環境のjwks_uriで公開されるため、ライブラリがそれを取得し、鍵がローテーションされたときには新しい鍵を取り込みます。

スコープ

スコープアプリが受け取るもの
openid必須。ユーザーのsubを含むIDトークン。
profile名前と写真。
emailメールアドレスと、それが確認済みかどうか。
offline_accessサインイン状態を保つためのリフレッシュトークン。