对于前端反应,我使用ReactKeycloakProvider作为要求用户登录的方式,然后令牌应该从'keycloak-js'存储到Keycloak中。
<ReactKeycloakProvider
authClient={MYKEYCLOAK}
initOptions={{onLoad: 'login-required'}}
>
<BrowserRouter>
<MainRouter />
</BrowserRouter>
</ReactKeycloakProvider>
对于Keycloak,我使用的是Keycloak v.20.0.2,客户端访问类型根据需要设置为机密,Client Authenticator是Client Id和Secret。
问题是,用户登录后,获取不到token,出现401错误:
{
"error":"unauthorized_client",
"error_description":"Invalid client or Invalid client credentials"
}
.但是,我期待能够成功获得令牌。
我设置访问类型为public,然后token取回成功。但是,当我将其设置为机密时,会出现 401 错误。所以我认为这是因为我没有将客户端机密放入 keycloak 对象中。
此外,尝试使用 keycloak.json 将客户端机密放入 keycloak 配置中,如下所示:
import Keycloak from 'keycloak-js';
const KEYCLOAK = new Keycloak('/keycloak.json');
但是只有把.json放在public文件夹下才能识别,很奇怪,会死循环
如果您在向 Keycloak 发出 API 请求时添加了错误的 URL,您可能会收到“unauthorized_client”错误以及消息“无效的客户端或无效的客户端凭据”。
要解决此问题,请确保您在 API 请求中使用正确的 Keycloak 服务器 URL。您可以在 Keycloak 管理控制台的 Realm Settings > General > “Issuer URL” 下找到您的 Keycloak 服务器的正确 URL。 https://usw2.auth.ac/auth/realms/{your-realm}/protocol/openid-connect/token/ 获得正确的 URL 后,使用新 URL 更新 API 请求并重试。这应该可以解决“unauthorized_client”错误