見出し画像

Auth0でstandard OIDC claimsの属性を追加する

こんにちは、「YOINOKOE PROJECT」のLunamikanです。

今回はAuth0関連の話題となります。

OIDCを使用し、SSOでAuth0のユーザー情報をアプリで取得する際、初期状態ではID Tokenに含まれる属性が想定していたよりも少なく、またカスタマイズ方法を調べる際にも日本語の記事がなく手間取ってしまったので、同じように困っている方のために自分が取り組んだことを残そうと思います。

※本記事は自分へのメモ書きのような性質が強いため一部書き方が雑な部分がございますがご了承ください。


本記事で追加する属性は各ユーザーのuser_metadataに含まれる内容としています。事前にuser_metadataに必要な属性情報が記録されている状態にしてください。

1. はじめに

Auth0ではOIDCを使用したSSOをアプリに実装することができますが、初期状態では取得できるID Token(JWTトークン)の属性が以下のもののみとなっています。

取得したID Tokenの属性
nickname
name
picture
updated_at
email
email_verified
iss
aud
iat
exp
sub
sid

必要最低限は揃っているのですが、個人的にはfamily_nameやgiven_nameなどの上記以外のstandard OIDC claimについても取得したかったため、カスタマイズを行いました。その内容を本記事に記録します。

2. standard OIDC claimsについて

ID Tokenで取得できる属性については大きくstandard claimsとcustom claimsに分かれます。standard claimsとはOIDCの標準規格仕様書で定められた属性のことであり、私が今回取得したいfamily_name、given_nameなどの他にもgenderやaddressなどがあります。

全てのstandard claimsについては以下のOIDC仕様書ページをご確認ください。

上記の仕様書で定められていない属性についても開発者の裁量でID Tokenに含めることができ、それらをcustom claimsと呼びます。

custom claimsでは属性名を以下のように名前空間+カスタム属性名とすることになっています。

名前空間が「https://example.com」で、カスタム属性名が「attribute」の時

属性名: https://example.com/attribute

Auth0では基本的にはID Tokenに含める属性を増やすときは、このcustom claimsを追加する前提となっているため、今回のような案件では、公式ドキュメント通りというわけにはいきません。

ちなみになぜそのようなことになっているかというと、将来的にAuth0でstandard claimsに標準的に含まれる内容が増えた際、各開発者が独自に実装していると、競合が発生してしまうからですね。

3. Auth0から返却されるID Tokenをカスタマイズするには

上記のリスクを事前に理解した上で、それでもID Tokenに含まれるstandard claimsを追加したいという場合は、Auth0 Actionsを使用します。
2024年11月時点で無料プランでも5つまでActionsを追加できるようなのでとても良いですね。

4. Custom Actionを追加する

今回はActionsの中でも「post-login」のトリガーにCustom Actionを設定します。

Auth0のダッシュボードで上記の画面を開き、「post-login」を選択、その後右側の「Add Action」からCustomを選択し、「+」ボタンから「Build from scratch」をクリックしましょう。

※Nameは要件に合わせてお好きに変えてください。

そして無事空のActionが作成されたらコードを書いていきます。その前に初期状態で記述のコードは不要なので全て消してしまって大丈夫です。

そうしたら、今回はAuth0のAPIの中でもapi.idToken.setCustomClaim();という物を使用してコードを記述していきます。このAPIを使用したID Tokenの編集方法については公式のドキュメントがありますので以下にリンクを貼ります。

上記のページに記載のプログラムを応用すると、以下のようなプログラムを作成できます。

exports.onExecutePostLogin = async (event, api) => {
  const { birthdate, family_name, gender, given_name } = event.user.user_metadata;

  if (event.authorization) {
    // Set claims 
    api.idToken.setCustomClaim(`given_name`, given_name);
    api.idToken.setCustomClaim(`family_name`, family_name);
    api.idToken.setCustomClaim(`gender`, gender);
    api.idToken.setCustomClaim(`birthdate`, birthdate);
  }
};

このプログラムはcustom claimsを追加しない方向けのものですが、standard claimsに加えて custom claimsも追加したい場合は、適宜名前空間などの内容を加えてください。

上記のプログラムを軽く説明すると、2行目で、対象ユーザーのuser_metadataから今回必要な属性情報を取得しています。そして取得した属性情報を、「// Set claims」以下でID Tokenの属性に追加しています。「given_name」などのstandard claimsの属性名は仕様書通りの名前にしてください。

あとは要件に応じてカスタマイズした上記のコードを先ほどのActionに書き込み「Deploy」を押します。その後、「past-login」のページで作成したActionを設定すれば、無事取得できるID Tokenの属性が増えたと思います。

ちなみに取得できるデータの確認は以下のAuth0のサイトから簡単に行うことができますので宜しければ。
※テストに使用するAuth0のアプリでAllowed Callback URLsに「https://openidconnect.net/callback」を設定してください。

5. さいごに

お疲れ様でした!
トラブルや本記事に関するご意見、ご要望などは僕LunamikanのX(Twitter)にお送りいただければと思います。

最後に、ヨイノコエについて軽く紹介だけさせていただきます。

僕達「YOINOKOE PROJECT」は、テクノロジー✕クリエイターでエンターテイメントがすべての人にとって身近なものになることを目指し、活動しています。

今回の記事のような、皆さんが活用できる情報の公開やツール/サービスの開発から、オリジナル楽曲/MVの制作やVTuberのプロデュース/運営など、エンターテイメントに関する事業に幅広く取り組んでいます。クリエイターの方も、リスナーの方も、全員がワクワクする挑戦を続けていきますので、ヨイノコエのことを応援していただけると嬉しいです。

公式サイト↓

以下からヨイノコエ公式X(Twitter)のフォローもお願いします!

最後までお読みいただきありがとうございました。
またお会いしましょう!

いいなと思ったら応援しよう!