我在理解如何使用 Keycloak
和 keycloak-js
适配器在我的前端将身份验证和授权用户链接在一起时遇到了一些麻烦。
作为序言:我知道 keycloak-js
适配器要求客户端将 public
作为访问类型。
我的主要问题是如何通过同一客户端使用 Keycloak
身份验证和授权。如果访问类型必须设置为 public
才能使 keycloak-js
适配器工作,那么我如何根据用户权限限制对我的 API 的访问?
为此我需要两个客户吗?一种用于身份验证,一种用于授权?如果是这样,我如何在授权客户端中使用来自身份验证客户端的访问令牌?
我目前在 Keycloak 中的设置如下:
admin-service
admin-service-api
confidential
(因为我想根据权限级别使用授权来限制api请求)http://localhost:8080/
http://localhost:8080/*
admin
test-user
我对 admin-service-api
的授权设置如下:
Books Resource
/v1/books
/v1/books/{id}
books:delete
books:create
books:update
books:read
Books Resource
Books Policy
因此,在此设置中,我通过 https://my.auth.server/auth/realms/{{realm_name}}/protocol/openid-connect/token
向 Keycloak API 发出请求以检索用户,从而限制了我的 API(用 GoLang 编写)仅在请求用户具有适当权限的情况下才允许请求访问令牌和用户权限列表。
从那里我可以使用此访问令牌向我的 API 发出请求以创建/读取/更新/删除书籍,只要我的 test-user
具有 admin
角色。如果我的用户没有 admin
角色,则会向用户显示未经授权的消息 (401)。