Hasuraについて考えてみた- 認証・認可編
2022/10/31
認証・認可
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 と等しいときに全てのカラムを取得する
➝ アクセスコントロールはかなり柔軟にできそう
この記事を書いた人
アダプター株式会社
代表取締役小副川 貴博
ウェブデザインの専門学校を卒業し新卒でウェブ制作会社へ入社。WEBディレクション・デザイン・コーディング・運営保守など幅広い業務を経験後2013年にフリーランスとして独立。2018年にアダプター株式会社として法人化し大手企業から個人事業主に至るまで300社を超えるウェブサイト制作を担当。
TOP