我是 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 令牌对同一领域中的任何其他客户端进行身份验证。但显然我在拼图中遗漏了一些东西。