© 2021 Addapter Inc.

BLOG

Hasuraについて考えてみた- 認証・認可編

コーディング2022/10/31
blog author
なーこ
blog thumbnail

目次

認証・認可

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 = ユーザー作成後に

Post Login = ユーザーログイン後に

  • ユーザーのロールを取得 (userIdをもとにユーザー取得)

JWTにカスタムclaimを追加する (https://hasura.io/docs/latest/auth/authentication/jwt/#tldr) x-hasura-default-rolex-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ユーザーID
x-hasura-default-rolex-hasura-roleがなかったときのデフォルトロール
x-hasura-allowed-roles は許可されたロール : x-hasura-role がこの範囲であれば認可される

➝ 基本、 x-hasura-role でロール指定してJWTを添えてAPI投げる

パーミッション

左のロールにはロールの名前、右にそのロールの許可リスト

例えば、以下

「ユーザーの情報は、今ログインしているユーザーしか見られない」

これは以下の通り設定すると可能取得するユーザーのidが、JWT由来の x-hasura-user-id と等しいときに全てのカラムを取得する

➝ アクセスコントロールはかなり柔軟にできそう

scroll to Top