ユーザーログイン(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_type | Yes | id_token を指定 |
client_id | Yes | App の client_id |
redirect_uri | Yes | AppOidcConfig に登録済みの URL |
nonce | Yes | リプレイ攻撃防止用のランダム文字列 |
scope | Yes | openid を指定 |
state | Yes | CSRF 防止用のランダム文字列 |
workspace_hint | No | Workspace 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-configurationJWKS エンドポイント:
GET https://id.speria.jp/.well-known/jwks.json標準的な OIDC ライブラリ(oidc-client-ts 等)がそのまま使えます。
4. セッションの作成
id_token の検証後、ペイロードからユーザー情報を取得してアプリケーション側でセッション(Cookie 等)を作成してください。id_token を継続的な認証トークンとして使わないでください。
id_token のペイロード
| クレーム | 説明 |
|---|---|
iss | https://id.speria.jp |
sub | ユーザー ID |
aud | client_id |
exp | 有効期限(発行から 1 時間) |
nonce | リクエスト時の nonce |
email | ユーザーのメールアドレス |
speria:workspace_id | 選択された Workspace の ID |
speria:workspace_name | 選択された Workspace の名称 |
speria:role | Workspace における役割(owner / manager / staff) |
署名
| 項目 | 仕様 |
|---|---|
| アルゴリズム | ES256(ECDSA P-256 + SHA-256) |
| 鍵管理 | Google Cloud KMS |
| 鍵ローテーション | JWKS に新旧両方の公開鍵を併載 |
App インストールとの組み合わせ
OIDC ログインと App インストールを組み合わせる場合、ログイン後に id_token の speria:workspace_id で AppInstallation の存在を確認してください。未インストールの場合は、speria:role が owner であればインストールフロー(/authorize に response_type=code)への誘導が可能です。
セキュリティ
nonceは必須です(リプレイ攻撃防止)stateは必須です(CSRF 防止)redirect_uriは AppOidcConfig に登録済みの URL と完全一致で検証されますid_tokenは URL フラグメントで返却され、サーバーログに残りませんdebug: false(デフォルト)の場合、redirect_uriは HTTPS のみ許可されます