メタデータのフィールド名とデータ型

Auth0は、特定の種類の情報を保管するために使用されるメタデータを3種類に区別しています。

メタデータタイプ フィールド名 説明
User Information(ユーザー情報) user_metadata ユーザーの主要な機能性に影響しない設定などのユーザー属性を保管します。このデータは、Management APIを使ってフォームを作成すると、ログイン済みのユーザーが編集できるため、安全なデータ保管場所としては使用できません
Access Information(アクセス情報) app_metadata 権限、Auth0プラン、外部IDなど、ユーザーの機能へのアクセスに影響する情報を保管します。このデータはユーザーが編集できないため、このフィールドに保管できる情報には制約があります。
Application Information(アプリケーション情報) Clientオブジェクトのclient_metadata、ルールのcontext.clientMetadata、ログイン後アクションのevent.client.metadata アプリケーション(OIDC OAuth2の用語ではクライアント)に関する情報を保管します。たとえば、アプリケーションのホームページのURL(Auth0がアプリケーション設定で指定しない任意の値)です。

メタデータフィールド名

使用できる文字

フィールド名に.(ドット)または$(ドル記号)の文字を含めてはいけません。

たとえば、以下は許可されません。

{
  "preference.color": "pink"
}

Was this helpful?

/

しかし、以下のように拡張することはできます。

{
    "preference": { 
        "color": "pink" 
    }
}

Was this helpful?

/

動的フィールド名

フィールド名は静的である必要があります。動的フィールド名は、インデックス作成の効率を低下させ、検索クエリのパフォーマンスを劣化させます。静的スキーマは、検索、操作、作業が容易です。

以下のようにするのではなく、

{
    "participants": [
        "Alice": {
            "role": "sender"
         },
        "Bob": {
            "role": "receiver"
        }
    ]
}

Was this helpful?

/

このようにします。

{
    "participants": [
        {
            "name": "Alice",
            "role": "sender"
        },
        {
            "name" : "Bob",
            "role": "receiver"
        }
    ]
}

Was this helpful?

/

名前の衝突

app_metadataフィールドとルートプロファイルフィールドに同一の名前を使用することは避けてください。app_metadataフィールドは、ルールとアクションの両方でルートプロファイルにマージされるため、ルートプロファイルフィールドが上書きされる可能性があります。

たとえば、ユーザーのルートプロファイルに(SAML IDプロバイダーから返される)groupsフィールドがあり、app_metadata内にもgroupsフィールドがある場合、ユーザーのプロファイルは次のようになる可能性があります。

{
    "user_id": "samlp|example-samlp-connection|username@domain.com",
    "groups": [
        "external-group-1",
        "external-group-2"
    ],
    "app_metadata": {
        "groups": [
            "internal-group-1",
            "internal-group-2"
        ]
    }
}

Was this helpful?

/

ルールからユーザーオブジェクト上でgroupsフィールドを読み込む際、以下を返します:["internal-group-1", "internal-group-2"]

メタデータのデータ型

メタデータフィールドはすべてのJSON互換データ型をサポートします。

  • 文字列

  • 数値

  • 配列

  • オブジェクト

ユーザー間でデータ型を一貫して維持するようにしてください。たとえば、あるユーザー値を文字列として保管する(user.user_metadata.age = "23")すると同時に、別のユーザー値を数値として保存する(user.user_metadata.age = 23)と、データを取得する際に問題が発生する可能性があります。

制限と制約

レート制限

ログイン時にルールまたはアクションを使用してメタデータを更新すると、テナントのレート制限が適用されます。詳細については、「Management APIエンドポイントレート制限」をお読みください。

サイズ制限とストレージ

  • ユーザー検索エンドポイントでインデックス作成、クエリ、返却できるユーザーデータには1ユーザーあたり1MBの制限があります。ユーザープロファイルが1MBより大きい場合、app_metadataおよびuser_metadata内で256文字より多いすべての属性値は、検索できず、検索結果に返されません。ユーザープロファイルがこれらの大きな値を省いてもなお1MBを超える場合、そのユーザーのapp_metadataおよびuser_metadata属性は検索不可または返却不可となります。Auth0は、ユーザープロファイルが省略後もなお1MBを超える場合をwumイベントコードの下でキャプチャし、ログに記録します。オーバーサイズのユーザープロファイルについては、すべてのメタデータ属性を取得するために、ユーザー取得エンドポイントを使用する必要があります。

  • user_metadataフィールドをAuthentication APIのサインアップエンドポイントを使って設定する際には、それぞれの値が500文字を超えない文字列フィールドを最大10個含めることができます。カスタムサインアッププロセスでのメタデータの扱いの例については、「カスタムサインアップ」をお読みください。

  • client_metadataフィールドには最大10個のキーを含めることができます。そのキーと値のそれぞれの最大長は255文字で、UTF-8の特殊文字を含むことはできません。

制限

app_metadataフィールドには、以下のいずれのプロパティも含めてはいけません。

  • __tenant

  • _id

  • blocked

  • clientID

  • created_at

  • email_verified

  • email

  • globalClientID

  • global_client_id

  • identities

  • lastIP

  • lastLogin

  • loginsCount

  • metadata

  • multifactor_last_modified

  • multifactor

  • updated_at

  • user_id

もっと詳しく