0

我是 Keycloak 的新手。我根据文档在 Node.js 中创建了 simples 应用程序:

import express from "express";
import Keycloak from "keycloak-connect";

const keycloak = new Keycloak({});
const app = express();
app.use( keycloak.middleware());

app.get('/api', keycloak.protect(), function(req, res){
    res.send("This is API!");
 });
 
app.get('/', function(req, res){
    res.send("Server is up!");
 });
 
 app.listen(3000);

我的keycloak.json样子如下

{
    "clientId": "mydemoapp-api",
    "bearerOnly": true,
    "serverUrl": "http://mykeycloakserver:8180/auth",
    "realm": "myrealm",
    "realmPublicKey":"MIIBIjANBgk... "
}

客户端 mydemoapp-api 的访问类型设置为“机密”。使用 Postman 或 CURL,我可以生成令牌,然后使用它访问 entpoint /api。如果我尝试在没有令牌的情况下连接到 /api,我会被拒绝访问 - 到目前为止一切都很好。

我在 Keycloak 管理员中将 mydemoapp-api 的访问类型更改为“仅承载”。然后我在同一个领域 mydemoapp-client 中创建了另一个客户端,访问类型为“public”

我再次使用 Postman 为客户端 mydemoapp-client 请求了一个令牌。然后我使用这个令牌访问端点/api。但我总是被拒绝访问。

从文档中我了解到,如果没有指定角色并且没有激活其他限制,我应该能够登录到领域中的任何客户端,然后使用 SSO 令牌对同一领域中的任何其他客户端进行身份验证。但显然我在拼图中遗漏了一些东西。

4

1 回答 1

1

我找到了以下博客https://developers.redhat.com/blog/2020/01/29/api-login-and-jwt-token-generation-using-keycloak#test_your_new_client

它建议设置Authentication Flow Overrides/Direct Grant Flowdirect grantfor mydemoapp-client。它有效!

于 2021-06-23T12:18:16.197 回答