Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HasuraのアクセスをKeycloakで認可する #49

Open
4 tasks done
TsubasaOura opened this issue Jun 4, 2023 · 0 comments
Open
4 tasks done

HasuraのアクセスをKeycloakで認可する #49

TsubasaOura opened this issue Jun 4, 2023 · 0 comments
Assignees
Labels
backend HasuraやDBについて

Comments

@TsubasaOura
Copy link
Contributor

TsubasaOura commented Jun 4, 2023

引用:https://qiita.com/yu_kato/items/fbbf711947af36c17f7b

はじめに

↓読んで!

Hasuraにおいてアクセス制御(認可)はRoleを用いて行います。Role,Table, CRUD毎にPermissionと呼ばれるアクセスルールを設定し、DBの行単位、列単位での制御ができます。またHausraでは権限のない行や列はアクセスできなくなるだけでなく、スキーマからも消失するという特徴があります。
一方でユーザ認証はHasura外で行う必要があり、認証方式としてwebhook認証とJWT認証の2種類が提供されています。いずれもSession Variablesと呼ばれる変数(X-Hasura-RoleやX-Hasura-User-Id等)に値をセットし、Hausraに渡すことでユーザの識別やアクセス制御を行います。webhook認証ではHasuraがwebhookにHTTPリクエストを送信しwebhook側でTokenの検証が行われた後、レスポンスとしてRoleやSession Variablesが返却されます。JWT認証は認証やアクセス制御等の属性情報(claim)をJSON形式で記述したJSON Web Token(JWT)を用いる認証方式です。

開発手順

  • Keycloakにrole追加

    • 全体にuserrole
    • 情報局にdevelopperrole
    • 技大祭実行委員にmanagerrole
  • KeycloakにMapperの設定

項目名 x-hasura-default-role x-hasura-allowed-roles x-hasura-user-num
Mapper Type Hardcoded claim User Client Role User Attribute
User Attribute - - num
Client Id - hasura -
Multivalued - ON -
Token Claim Name https://hasura\.io/jwt/claims.x-hasura-default-role https://hasura\.io/jwt/claims.x-hasura- allowed-roles https://hasura\.io/jwt/claims.x-hasura-user-num
Claim value user - -
Claim JSON Type String String String
  • KeycloakでRoleの権限編集

    • 最後に"Users"でアクセストークンを取得するユーザを編集します(ここではadmin)。そして"Attributes"でKeyにnum、Valueに3を追加します。続いて"Role Mappings"で"Client Roles"にhasuraを選択し、"Available Roles"にある"manager"と"user","finance"を"Assigned Roles"に追加してください。
  • Hasuraで権限設定

    • managerroleとdevelopperroleは全員の情報にアクセス権限
    • userroleは自らのユーザー情報のみしか表示できない権限

X-Hasura-User-Numがuser_numと一致する行にのみアクセス
user.PNG

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend HasuraやDBについて
Projects
None yet
Development

No branches or pull requests

3 participants