1

我在 kubernetes 中运行 keycloak 15.0.2 以及 react 应用程序和 node-js 后端服务。

我有 2 个客户,一个是公共的(反应前端),另一个是仅承载(服务后端),没什么特别的。

现在我正在登录并获取令牌: 令牌

然后我通过 GET 方法从后端请求资源:

export const apiSlice = createApi({
  
  reducerPath: 'api',
  baseQuery: fetchBaseQuery({
    baseUrl: "https://example.com/api",
    prepareHeaders(headers){
      headers.set('Accept', 'application/x-www-form-urlencoded');
      headers.set('Authorization', 'bearer ' + keycloak.token)
      return headers;
    }
  }),
  endpoints(builder){
    return{
      fetchListings: builder.query({
        query: () => '/listings/'
      }),
...

后端客户端安装 json

{
  "realm": "MyRealm",
  "bearer-only": true,
  "auth-server-url": "https://auth.example.com/auth/",
  "ssl-required": "external",
  "resource": "listings-backend",
  "verify-token-audience": true,
  "use-resource-role-mappings": true,
  "confidential-port": 0
}

我总是得到一个 403 拒绝访问的答案。邮递员也一样。

如果我删除 keycloak.protect() 一切正常。

4

1 回答 1

0

好的,伙计们,在为这个问题苦苦挣扎了几天之后,前端客户端中的角色一直导致 403 access denied 错误。

删除所有角色后,它起作用了。

于 2021-11-19T17:15:15.993 回答