gpt4 book ai didi

javascript - Nodejs REST Api 的 Keycloak 策略执行

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:54 26 4
gpt4 key购买 nike

这是第一次在这里提问,所以如果我忘记提供一些信息或有任何其他错误,请原谅..抱歉,文字墙。

我尝试做的事情

(也许我完全错了):我创建了一个后端(仅限 node.js Bearer),它将提供 REST api。部分它通过前端(keycloak-clients)或直接由某些设备使用。一般来说,我尝试创建一个包含大量 CRUD 的应用程序。用户管理是在 keycloak 中完成的,只有我将这些请求转发到管理 REST Api。其他东西,比如设备……我存储在一个单独的数据库中。因此后端是前端和其他用例的抽象层。

到目前为止一切顺利,但一开始就足以检查请求是否来自经过身份验证的人,因此所有操作都通过 keycloak.protect() 进行处理 来自经过身份验证的人的 token 已通过但现在我想提供不同的授权级别(由于 Multi-Tenancy 的原因可能会有所不同,为什么我想通过客户端配置内的管理控制台中的策略和 co 来解决这个问题),因为普通用户只能访问某些路由并且管理层应具有对 api 的完全访问权限,但当然不需要 keycloak 管理员访问权限。因此,我为后端客户端启用了服务帐户,并为其授予了领域管理员 Angular 色,以便客户端可以访问所有内容,并且我可以自行处理后端客户端内部的授权(使用策略、权限……在管理中)安慰)。(以防万一没有人明白我在说什么。Fixing 我想应该可以帮助我解决我的问题)

设置

  • 使用express的node.js应用程序
  • 在 keycloak 管理控制台中注册为单个客户端( secret ,但代码内的配置仅供承载)
  • Keycloak 正在 docker 容器(版本 4.5)中运行
  • 所有服务都在 docker-compose 网络中运行,并位于通用 uri 的反向代理后面
  • 在客户端中启用授权并将默认策略更改为“否定”以始终拒绝 => 查看是否强制执行)

我的代码


app.js

const express = require('express');
const app = express();
const Keycloak = require('keycloak-connect');
const session = require('express-session');
const routes = require('./routes/index');


const kcConfig = {
'realm': 'master',
'bearer-only': true,
'auth-server-url': `https://DOMAIN/auth`,
'ssl-required': 'all',
'resource': 'fm-backend',
'credentials': {
secret: 'SOME_SECRET',
},
'confidential-port': 0,
'policy-enforcer': { //tried with an without this, changed nothing
'enforcement-mode': 'ENFORCING',
},
};

const memoryStore = new session.MemoryStore();
const keycloak = new Keycloak({ memoryStore }, kcConfig);

app.use(keycloak.middleware({ logout: '/api/logout', protected: '/api/gates' }));

// used before, worked for well for authentication
app.use('/api', keycloak.protect(), routes);

// now unfortunately I don't understand how to use keycloak.enforcer() middleware
app.use('/api', keycloak.enforcer({WHAT_COMES_HERE}), routes);

module.exports = app;

我的问题

我不明白如何使用我在后端管理控制台中创建的策略、权限和 Co。我如何强制使用这些?我尝试检查不同的示例和文档,但可以使其正常工作。我发现的最后一件事是,权利 api 被删除,但策略执行器被添加到 Nodejs 适配器中。在 documentation for the policy-enforcer我找不到中间件的文档 (keycloak.enforcer({})) Link1 Link2 .

感谢任何帮助:)

最佳答案

我也没有 100% 理解它,但我的执行器的实现是这样的:

const resource = 'MyProtectedResource';
const scope = 'myScope'; // for example read
const permission = resource + ':' + scope;
keycloak.enforcer(permission, { response_mode: 'token' }); // for your config: app.use('/api', keycloak.enforcer(permission, {response_mode: 'token' }, routes};

我在 keycloak 管理控制台中为该客户端设置了资源、范围、策略和权限(在“授权”选项卡下)。您可以使用 keycloak 中的评估选项卡来查看资源/范围/策略/权限如何相互交互。

我使用 keycloak 进行编码的方法是在实际的 keycloak-connect 库中使用调试来逐步完成授权正在执行的操作。

关于javascript - Nodejs REST Api 的 Keycloak 策略执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com