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
更改为你之前复制的ID,并输入Casdoor的公共证书,你可以在Casdoor的Certs页面中找到。
然后输入你之前为Hasura创建的用户名和密码。
点击“登录”
返回到Casdoor/Token页面。
找到你之前输入的用户名,然后点击“编辑”
复制访问令牌
现在你可以使用访问令牌来发出经过身份验证的请求。 Hasura返回了适当的用户,而不是从数据库返回所有用户。