通常ルート
- Machine-to-Machine Applicationをまず作る(参考)
- デフォルトで存在するAuth0 Management APIを選択しpermissions(scopes)を選ぶ
- 出来たMachine-to-Machine Applicationの
client_id
、client_secret
でManagement APIのtokenを取る - authorization:
Bearer ${token}
みたいな形でManagement APIを呼ぶ
REST APIなので通信ができれば言語は問わないが、Javascript(node)でAPIを呼ぶ前提なら、かなり簡素にかける。
node-auth0 npmパッケージを使う
var ManagementClient = require('auth0').ManagementClient;
var auth0 = new ManagementClient({
domain: '{YOUR_ACCOUNT}.auth0.com',
clientId: '{YOUR_NON_INTERACTIVE_CLIENT_ID}',
clientSecret: '{YOUR_NON_INTERACTIVE_CLIENT_SECRET}',
scope: 'read:users update:users'
});
ManagementClientを使って、clientId、clientSecretを渡せば裏でManagement APIのtokenを取ってきてくれるので、コードがスッキリする。
githubのリポジトリを見るとわかるが、ManagementClient
には26個のプロパティがあって、
// https://auth0.com/docs/api/management/v2#!/Users_By_Email/get_users_by_email
auth0.users.getByEmail("email@address.local", (err, users) => console.log(users))
みたいにAPIの呼び出しが全てラップされている。
現状Typescriptは用意されていないようなので、ソースを読まないといけないのが難点。
現状これがドキュメントっぽい。
躓き点
domainとかがdomain: '{YOUR_ACCOUNT}.auth0.com'
になっているけど、最近作ったアカウントのApplicationのdomainは.us
が間に入ってて、気づかずdev-tm15fv0o.auth0.com
みたいな形でテストしてた。
これでずっとaccess_denied: {"error":"access_denied","error_description":"Unauthorized"}
のエラーで悩まされてた。
(accountとも言うし、tenantとも言うし、他にも色々同じ箇所を別の言い方で説明しているのでとにかくドキュメントが読みづらい...)