首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >API授权工具

API授权工具
EN

Stack Overflow用户
提问于 2022-04-21 23:34:12
回答 1查看 37关注 0票数 1

我正在使用RBAC端点开发一个应用程序,该应用程序需要使用RESTful系统进行适当的授权安全性。到目前为止,我已经研究了Keycloak。它一开始看起来很有前途,但不支持端点的粒度授权控制,这是一个困难的需求。例如,如果我有端点/object/<object:id>、对象I列表( [1,2,3,4] )和测试用户,就无法限制测试用户只能访问对象I( [1,2] ),而不能访问同一个端点的[3,4]。用户似乎可以访问所有的It或无It。也许这可以通过定制或扩展基本密钥披风服务器来实现,但是在Keycloak网站上并没有足够的文档说明如何这样做。

我已经搜索过其他RBAC权限系统,但没有找到多少。是否有任何授权系统可以做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2022-06-08 05:25:38

但不支持端点的粒度授权控制。

查看Auth0的细粒度授权解决方案:https://docs.fga.dev/。(免责声明:我受雇于Auth0)。

在您的特定情况下,您需要创建一个授权模型,如

代码语言:javascript
运行
复制
type object
   relations
      define reader as self

然后使用写API在FGA存储中添加以下元组

代码语言:javascript
运行
复制
(user:test, relation:reader, object:1)
(user:test, relation:reader, object:2)

然后,在您的API中,您将执行如下操作:

代码语言:javascript
运行
复制
const { Auth0FgaApi } = require('@auth0/fga')

const express = require('express')
const app = express()

const fgaClient = new Auth0FgaApi({
     storeId: process.env.FGA_STORE_ID,  // Fill this in!
     clientId: process.env.FGA_CLIENT_ID,  // Fill this in!
     clientSecret: process.env.FGA_CLIENT_SECRET // Fill this in!
});

app.get('/objects/:id', async (req, res) => {
    try {
        const { allowed } = await fgaClient.check({
            tuple_key: {
                user: req.query.user,
                relation: 'reader',
                object: "object:" + req.params.id
            }
        });
        if (!allowed) {
            res.status(403).send("Unauthorized!")
        } else {
            res.status(200).send("Authorized!")
        }
    } catch (error) {
        res.status(500).send(error)
    }

});

const port = 3000
app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71961903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档