keycloak-js 如何对用户进行身份验证和授权

时间:2021-07-30 10:44:45

标签: keycloak keycloak-services keycloak-rest-api

我在理解如何使用 Keycloakkeycloak-js 适配器在我的前端将身份验证和授权用户链接在一起时遇到了一些麻烦。

作为序言:我知道 keycloak-js 适配器要求客户端将 public 作为访问类型。

我的主要问题是如何通过同一客户端使用 Keycloak 身份验证和授权。如果访问类型必须设置为 public 才能使 keycloak-js 适配器工作,那么我如何根据用户权限限制对我的 API 的访问?

为此我需要两个客户吗?一种用于身份验证,一种用于授权?如果是这样,我如何在授权客户端中使用来自身份验证客户端的访问令牌?

我目前在 Keycloak 中的设置如下:

  • 领域:admin-service
  • 客户:admin-service-api
    • 访问类型:confidential(因为我想根据权限级别使用授权来限制api请求)
    • 根网址:http://localhost:8080/
    • 有效的重定向 URI:http://localhost:8080/*
  • 角色:
    • admin
  • 用户:
    • test-user

我对 admin-service-api 的授权设置如下:

  • 资源:Books Resource
    • Uri(这些是我的 API 端点):
      • /v1/books
      • /v1/books/{id}
    • 范围:
      • books:delete
      • books:create
      • books:update
      • books:read
  • 政策:
    • 默认政策
    • 图书政策:
      • 领域角色:
        • admin(未选中所需的复选框)
  • 权限:
    • 默认权限
    • 图书资源权限:
      • 资源: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)。

0 个答案:

没有答案