Hasura
統合する前に、まずCasdoorをローカルにデプロイする必要があります。
その後、以下の手順で独自のアプリにCasdoorベースのログインページを迅速に実装できます。
Casdoorアプリケーションの設定
- 既存のCasdoorアプリケーションを作成するか使用します。
- リダイレクトURLを追加します:
http://CASDOOR_HOSTNAME/login
- クライアントIDをコピーします。次のステップで必要になります。
Casdoorにユーザーを追加する
アプリケーションはありますが、ユーザーはまだいません。 つまり、ユーザーを作成し、役割を割り当てる必要があります。
「ユーザー」ページに移動し、右上の「ユーザーを追加」をクリックします。 新しいユーザーを追加できる新しいページが開きます。
ユーザー名を追加し、Hasura組織を追加してユーザーを保存します(他の詳細はオプションです)。
次に、ユーザーのパスワードを設定する必要があります。これは、「パスワードを管理する」をクリックすることで行えます。
ユーザーのパスワードを選択し、確認してください。
Hasuraアプリをビルドする
DockerまたはHasura CloudでHasuraを起動します。
次に、以下の列を持つusers
テーブルを作成します:
- テキスト型の
id
(プライマリーキー) - テキスト型の
username
参考のために下の画像を参照してください。
次のステップは、アプリのuser
ロールを作成することです。 ユーザーは自分のレコードのみを見ることができ、他人のレコードは見ることができません。
下の画像に示されているようにuser
ロールを設定します。 For more information, read about configuring permission rules in Hasura.
この方法では、ユーザーは他人のレコードを読むことができません。 彼らは自分のものにのみアクセスできます。
テスト目的で、ダミーユーザーを追加します。 これは、JWTトークンを使用するときに、他のユーザーの詳細ではなく、自分のユーザーの詳細のみが表示されるようにするためです。
次に、HasuraでJWT_SECRET
を設定する必要があります。
CasdoorでHasuraを設定する
このステップでは、HASURA_GRAPHQL_JWT_SECRETをHasuraに追加する必要があります。
そのためには、Hasuraのdocker-compose.yamlに行き、以下のように新しいHASURA_GRAPHQL_JWT_SECRET
を追加します。
HASURA_GRAPHQL_JWT_SECRET
は以下の形式であるべきです。 <Casdoor endpoint>
を自分のCasdoorのURL(例:https://door.casdoor.com
)に変更することを忘れないでください。
HASURA_GRAPHQL_JWT_SECRET: '{"claims_map": {
"x-hasura-allowed-roles": {"path": "$.roles"},
"x-hasura-default-role": {"path": "$.roles[0]"},
"x-hasura-user-id": {"path": "$.id"}
},"jwk_url":"<Casdoor endpoint>/.well-known/jwks"}'
変更を保存し、dockerをリロードします。
JWTトークンを取得する
クライアント実装がないため、以下のURLでリクエストを行うことによりアクセストークンを取得できます:
http://localhost:8000/login/oauth/authorize?client_id=<client ID>&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin&scope=read&state=app-built-in<public certificate>>
以前にコピーしたclient ID
に変更し、CasdoorのCertsページで見つけることができるCasdoorの公開証明書を入力します。
その後、Hasura用に作成したユーザー名とパスワードを入力します。
「サインイン」をクリックする
Casdoor/Tokenページに戻ります。
以前に入力したユーザー名を見つけてから、「編集」をクリックする
アクセストークンをコピーする
これで、認証されたリクエストを行うためにアクセストークンを使用できます。 Hasuraはデータベースからすべてのユーザーを返すのではなく、適切なユーザーを返しました。