初期登録( ユーザー属性登録)
このドキュメントは、初期登録(ユーザーの属性登録)機能の概要・設定・利用方法及び内部ロジックについて説明するものです。
概要
初期登録(ユーザー属性登録)は、OpenID Connect 認証フローの中で、ユーザーを新規作成するためのプロセスです。
この機能では、設定に基づき、登録時に必要なユーザー属性(例:メールアドレス、名前、パスワードなど)を柔軟に構成できます。
この登録プロセスは、認可サーバーの /v1/authorizations/{id}/initial-registration エンドポイントを通じて 提供され、
prompt=create などの認可リクエストによって開始されます。
また、パスワードのハッシュ化や重複ユーザーの検出など、ユーザー管理における基本的な安全対策も組み込まれています。
テナントは initial-registration の登録を行うことでこの機能を利用することが可能です。
設定
📘 全体構成
すべての認証設定は、統一されたinteractions形式を使用します:
{
"id": "UUID",
"type": "initial-registration",
"attributes": {},
"metadata": {},
"interactions": {
"initial-registration": {
"request": {
"schema": {
"type": "object",
"required": [],
"properties": {}
}
}
}
}
}
| フィールド | 説明 |
|---|---|
id | 設定ID(UUID) |
type | "initial-registration" 固定 |
attributes | カスタム属性(オプション) |
metadata | メタデータ(オプション) |
interactions | インタラクション定義 |
🔧 Request Schema の構成
interactions.initial-registration.request.schema で、ユーザー登録時に受け付けるフィールドを定義します。
✔ required
{
"required": [
"email",
"password",
"name"
]
}
- 登録/更新時に必須となる属性キーの一覧。
🧩 properties
項目一覧:
| 項目 | 型 | 説明 |
|---|---|---|
name | string | End-User の表示用フルネーム。肩書きや称号 (suffix) を含むこともある |
given_name | string | 名(Given Name) |
family_name | string | 姓(Family Name) |
middle_name | string | ミドルネーム |
nickname | string | ニックネーム |
preferred_username | string | End-User の選好するユーザー名(例:janedoe) |
profile | string | プロフィールページのURL |
picture | string | プロフィール画像のURL |
website | string | End-User のWebサイトURL |
email | string | End-User の選好するEmailアドレス |
email_verified | boolean | Emailアドレスが検証済みかどうか |
gender | string | 性別(例:male, female) |
birthdate | string | 生年月日(例:1990-01-01) |
zoneinfo | string | タイムゾーン情報 |
locale | string | ロケール(例:ja-JP) |
phone_number | string | 電話番号(E.164形式が推奨) |
phone_number_verified | boolean | 電話番号が検証済みかどうか |
address | object | 郵送先住所(JSONオブジェクト) |
custom_properties | object | カスタムのユーザークレーム(JSONオブジェクト) |
password | object | パスワード.DB登録時はハッシュ化を行う。 |
🧩 プロパティ属性
プロパティごとに属性を定義します。
| フィールド | 説明 |
|---|---|
type | string, integer, boolean, object, array のいずれか。 |
items | array型の場合の要素の型。 |
enum | 許可された値の一覧(例:["male", "female"])。 |
minLength | 文字列の最小文字数。 |
maxLength | 文字列の最大文字数。 |
pattern | 正規表現による文字列制約(例:^[A-Z][a-z]+$)。 |
format | email, uuid, uri, date, mobile_phone_number など。 |
description | 項目の説明。UIなどで利用可能。 |
例:
{
"properties": {
"email": {
"type": "string",
"format": "email",
"minLength": 5,
"maxLength": 256,
"description": "ログインに使用するメールアドレス"
}
}
}
🧪 完全な設定例
情報源: config/examples/e2e/test-tenant/authentication-config/initial-registration/standard.json
{
"id": "609dfa45-b475-4b50-b981-59c2975db2b3",
"type": "initial-registration",
"attributes": {},
"metadata": {},
"interactions": {
"initial-registration": {
"request": {
"schema": {
"type": "object",
"required": [
"email",
"password",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": "string",
"format": "email",
"maxLength": 255
},
"password": {
"type": "string",
"pattern": "^(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()]).+$",
"minLength": 8,
"maxLength": 64
},
"gender": {
"type": "string",
"maxLength": 255
},
"locale": {
"type": "string",
"maxLength": 255
},
"custom_properties": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
}
}
利用方法
- 方式:
initial-registrationの設定を登録する - 認可リクエスト
prompt=createを指定するなどして、signup画面を表示する - 認可画面から
initial-registrationのschema定義に応じたリクエストボディで/v1/authorizations/{id}/initial-registrationにリクエストを行う。
🔁 API リクエスト例
POST /v1/authorizations/1234567890/initial-registration
Content-Type: application/json
{
"email": "user@example.com",
"password": "Secret123!",
"name": "Taro Yamada"
}
内部ロジック
-
スキーマ取得
AuthenticationConfigurationQueryRepository.get(tenant, "initial-registration", Map.class)により、テナントごとの属性スキーマ(JSON Schema)を取得。 -
JSON Schemaバリデーション
JsonSchemaValidatorによってAuthenticationInteractionRequestの内容を検証。 -
ユーザー重複チェック すでに登録済みのユーザーがいないかを確認。
-
ユーザー生成 バリデーション済みの属性から
Userを生成し、password属性が存在する場合はpasswordEncodeDelegationによりパスワードをハッシュ化。 -
成功レスポンス生成 認証成功時は
userとauthentication情報を含むレスポンスを返却。 -
バリデーションエラー時 or 重複時 適切な
clientErrorレスポンスと共にuser_signup_failureやuser_signup_conflictのSecurityEventTypeを発行。
このように、初期登録ではテナントごとに定義されたJSON Schemaに従って、柔軟に入力項目の構造・制約をカスタマイズできます。
💡 補足事項
additionalProperties: falseにより、未定義の項目は拒否されます。- スキーマは OpenID Connect や OAuth 2.0 におけるユーザー情報(claims)管理と連携可能です。
custom_propertiesにより、動的拡張も可能です(管理画面による動的フォーム生成をサポート)。