この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。 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"
}
雪溶けちゃったなぁ。