微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由 Keycloak 保护的 Node.js API,访问类型为“bearer-only”

如何解决由 Keycloak 保护的 Node.js API,访问类型为“bearer-only”

我是 Keycloak 的新手。我已经按照文档在 Node.js 中创建了简单的应用程序:

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('/',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 我可以生成令牌,然后用它访问入口点 /api。如果我尝试在没有令牌的情况下连接到 /api,则会被拒绝访问 - 到目前为止一切顺利。

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

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

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

解决方法

我找到了以下博客 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 Flow 设置 direct grantmydemoapp-client。它有效!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。