Auth0 のRules で Access Token に Roleを追加する
渡辺です。 Auth0をいじっているのでメモ。
2019/05時点のAuth0では、Groupは存在せず、Roleのみが提供されている。 ただし、Auth0 Authorization Extentionを追加すると、パフォーマンスなどネックはあるもののGroupが利用できる。
とりあえず、特定のユーザに権限を与えたい。 Groupが妥当だけど、Roleでもいい、Access Tokenに乗ってくれば・・・
Roleの作成
とりあえずAdmin Roleを作成し、ユーザに付与する。 Users & Roles メニューからポチポチすればOK。
Rulesの作成
RolesはスタンダードなClaimには乗らないので、カスタマイズするためにRuleを追加する。 Ruleってのは認証時に割り込み処理を行って、カスタマイズするようなJavaScriptのコードのこと。 特定のIPをブロックしたり、好き放題できる。
Empty Ruleで作成。
context.accessTokenにrolesを設定。 claimのルールなのでネームスペースを使うこと。
function (user, context, callback) { const namespace = 'https://classmethod.jp/'; const assignedRoles = (context.authorization || {}).roles; context.accessToken[namespace + 'roles'] = assignedRoles; return callback(null, user, context); }
動作確認
Ruleを有効にしたら /token APIでAccess Tokenを作成。
無事、JWTにRoleが乗りました。
2019-05-08T09:59:08.298Z bbc752d8-dd35-4c9f-b900-81a4f17e154c { "https://classmethod.jp/roles": [ "Admin" ], "iss": "https://xxxxxx.auth0.com/", "sub": "auth0|xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "aud": "https://xxxxxx.auth0.com/api/v2/", "iat": 1557309526, "exp": 1557395926, "azp": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "scope": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "gty": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
雪溶けちゃったなぁ。