Speria Docs
認証

ユーザーログイン(OIDC)

OIDC Implicit Flow による Speria アカウントでのログイン

概要

OIDC Implicit Flow を使うと、外部アプリケーションで Speria アカウントによるユーザーログインを実現できます。ユーザーは Speria のログイン画面で認証し、アプリに id_token(JWT)が返却されます。

OIDC ログインに App のインストールは不要です。認証(ログイン)と認可(データアクセス)は独立しています。

前提

App に AppOidcConfig を設定する必要があります。developer アプリの App 設定画面 →「ユーザーログイン」セクションで、OIDC 用の redirect_uris を登録してください。

フロー

1. アプリ → /authorize にリダイレクト(response_type=id_token, client_id, redirect_uri, nonce, scope=openid)
2. Speria → ユーザー認証(メール OTP)→ Workspace 選択
3. Speria → redirect_uri#id_token=xxx にリダイレクト
4. アプリ → id_token を検証 → セッション作成

実装手順

1. 認可リクエスト

ユーザーを Speria の認可エンドポイントにリダイレクトします。

GET https://id.speria.jp/authorize
パラメータ必須説明
response_typeYesid_token を指定
client_idYesApp の client_id
redirect_uriYesAppOidcConfig に登録済みの URL
nonceYesリプレイ攻撃防止用のランダム文字列
scopeYesopenid を指定
stateYesCSRF 防止用のランダム文字列
workspace_hintNoWorkspace ID を指定すると Workspace 選択をスキップ

2. id_token の受け取り

認証が完了すると、redirect_uri の URL フラグメント(#)に id_token が返されます。

https://your-app.example.com/callback#id_token=eyJhbGciOi...

フラグメントはサーバーに送信されないため、JavaScript でクライアントサイドから取得してください。

3. id_token の検証

id_token は JWKS エンドポイントの公開鍵で署名を検証してください。

Discovery エンドポイント:

GET https://id.speria.jp/.well-known/openid-configuration

JWKS エンドポイント:

GET https://id.speria.jp/.well-known/jwks.json

標準的な OIDC ライブラリ(oidc-client-ts 等)がそのまま使えます。

4. セッションの作成

id_token の検証後、ペイロードからユーザー情報を取得してアプリケーション側でセッション(Cookie 等)を作成してください。id_token を継続的な認証トークンとして使わないでください。

id_token のペイロード

クレーム説明
isshttps://id.speria.jp
subユーザー ID
audclient_id
exp有効期限(発行から 1 時間)
nonceリクエスト時の nonce
emailユーザーのメールアドレス
speria:workspace_id選択された Workspace の ID
speria:workspace_name選択された Workspace の名称
speria:roleWorkspace における役割(owner / manager / staff

署名

項目仕様
アルゴリズムES256(ECDSA P-256 + SHA-256)
鍵管理Google Cloud KMS
鍵ローテーションJWKS に新旧両方の公開鍵を併載

App インストールとの組み合わせ

OIDC ログインと App インストールを組み合わせる場合、ログイン後に id_tokensperia:workspace_id で AppInstallation の存在を確認してください。未インストールの場合は、speria:roleowner であればインストールフロー(/authorizeresponse_type=code)への誘導が可能です。

セキュリティ

  • nonce は必須です(リプレイ攻撃防止)
  • state は必須です(CSRF 防止)
  • redirect_uri は AppOidcConfig に登録済みの URL と完全一致で検証されます
  • id_token は URL フラグメントで返却され、サーバーログに残りません
  • debug: false(デフォルト)の場合、redirect_uri は HTTPS のみ許可されます

目次