目次
認証・認可
Auth0使う
このサイト(https://hasura.io/jwt-config/)にて指定したプロバイダーと、ドメインからJWT configを生成したものを、環境変数 HASURA_GRAPHQL_JWT_SECRET
に指定することで、JWT認証が可能となる※ 現在(2022/10/31)、FirebaseとAuth0のみ対応している
環境変数 HASURA_GRAPHQL_ADMIN_SECRET
を設定している場合、ヘッダーに x-hasura-admin-secret
を用いることでHasuraの全てのリソースにアクセスできる (シークレットに保存!!)
Auth0のアクショントリガー
Post Registration = ユーザー作成後に
- ロールを指定してDBにユーザー作成 (https://auth0.com/docs/customize/actions/flows-and-triggers/post-user-registration-flow#store-the-auth0-user-id-in-a-remote-system)
Post Login = ユーザーログイン後に
- ユーザーのロールを取得 (userIdをもとにユーザー取得)
JWTにカスタムclaimを追加する (https://hasura.io/docs/latest/auth/authentication/jwt/#tldr) x-hasura-default-role
, x-hasura-allowed-roles
は必須
ヘッダーのx-hasura-role
にてロールを指定する ➝ hasuraがこのカスタムclaimを見て認可制御行うカスタムclaimはこんな感じ
"x-hasura-default-role" : ...,
"x-hasura-allowed-roles": ...,
"x-hasura-user-id": ...,
x-hasura-user-id
はauth0ユーザーIDx-hasura-default-role
はx-hasura-role
がなかったときのデフォルトロールx-hasura-allowed-roles
は許可されたロール : x-hasura-role
がこの範囲であれば認可される
➝ 基本、 x-hasura-role
でロール指定してJWTを添えてAPI投げる
パーミッション
左のロールにはロールの名前、右にそのロールの許可リスト
例えば、以下
「ユーザーの情報は、今ログインしているユーザーしか見られない」
これは以下の通り設定すると可能取得するユーザーのidが、JWT由来の x-hasura-user-id
と等しいときに全てのカラムを取得する
➝ アクセスコントロールはかなり柔軟にできそう