- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计一个基于微服务的应用程序,它有两个 API 端点,其中一个用于用户访问。使用 JWT 进行身份验证的用户可以属于不同的组织,这些组织又按层次组织。每个用户都可以有一些角色,这些角色是为每个组织类型定义的;组织和角色之间的组合定义了可以从用户(方法和资源)访问哪些 API。总之,它可能会变得一团糟!
有几个库提供了 ACL 功能,但我想知道把它们放在哪里:第一个解决方案似乎是 API 网关,它应该为每个请求调用一个组件。
- JWT 包含用户的角色 ID 列表-API 网关验证 JWT 并使用角色 ID 在每个角色都有权限列表的表中查找(例如可以 POST/users)-如果角色与请求匹配,则后者被转发到正确的服务;否则,网关响应 403
其他选项是将“auth-service”放入架构中。网关只是将所有请求转发到正确的服务,每个服务(可能依赖于一个公共(public)库)将 token 发送到 auth 服务并请求授权以满足请求。在这种情况下,auth 服务是/auth 资源下所有请求的“正确服务”,提供登录/注销、 token 刷新和新用户注册(例如当您单击登录邮件中提供的链接时)
第一个解决方案提供了一个“胖网关”,它在逻辑上有一个很小的层,但强制所有服务只响应安全调用,分解所有身份验证/组织逻辑,而不是在服务之间添加依赖性,但是
谢谢你的回答!!!
最佳答案
我回来分享我对围绕帖子主题做出的选择的看法。我遵循的方式是
API Gateway is aware of auth data sent along with requests (the "Authorization header" in practice) and does verifications. JWTs carry all necessary information, so the api gateway can apply its policies that are unknown to downstream services.
在我的架构中有一些 RBAC,没有什么可以放在 jwt 中,所以我们在网关上移动了访问控制逻辑。我们采用了一个自定义的 nodejs 库作为插件,但我不得不承认这弄乱了我们的网关,我们发现 authz 配置缓慢且容易出错。在这一方面,我们正在为缺乏与主要配置信息的集成而付出代价。它会很有用,比如
routes:
- route1:
path: /foos/:fooid/bar
downstreamService: http://foo.cluster
authz:
readerRole:
- GET
writerRole:
- POST
all:
- OPTIONS
但是,Api 网关不能独自完成所有事情:需要联系我称之为“身份提供者”的服务,这些服务将“消费者”概念模型化的实体封装到平台中:用户、设备、应用程序。我们的api网关根据JWT数据对identity进行GET,验证identity是否存在,是否一切正常。此外, token 生成/刷新不是 api 网关关注的问题,但有一个认证服务器(一个是独立的,另一个仍然嵌入到单体中)是连接的。所有这些都会产生大量负载,但可以通过“identites”缓存轻松缓解。请注意在身份发生变化时使缓存无效,或者至少尝试使用尽可能少的信息,这样您就可以只关心身份删除
我们的下一步将是制造/购买一个更结构化的身份验证服务器,它将继续与网关集成,但能够独立扩展并且更清晰和易于配置,可能带有某种 UI
作为云原生爱好者,我也在看istio除其他外,它具有身份验证功能,但我仍然需要了解是否适合我需要能够进行一些自定义的方法
关于architecture - API 网关和 ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010721/
我正在尝试修改一个对象的 ACL,而不创建另一个对象。我不希望删除或覆盖当前的 ACL。每当我使用 object.setACL() 时,它都会覆盖当前的 ACL。 有没有办法保存修改后的ACL而不覆盖
我正在尝试修改一个对象的 ACL,而不创建另一个对象。我不希望删除或覆盖当前的 ACL。每当我使用 object.setACL() 时,它都会覆盖当前的 ACL。 有没有办法保存修改后的ACL而不覆盖
我在客户端和服务器之间有一个代理服务器。 我使用 XDR 读取和修改它们之间的 NFS 消息 例如,如果我想编辑文件大小并获取属性回复我使用结构和函数 GETATTR3res bool_t xdr_G
我正在考虑 RabbitMQ 在创建多用户聊天系统方面的用处。人们可以在不同的房间里聊天,一些是公共(public)的,一些是私有(private)的,还有私有(private)的。是否有可能实现私有
无法让属于“用户”组的用户访问(至少阅读)项目。我已经阅读并尝试了我在互联网上找到的几个例子,似乎没有一个工作。 我现在需要的是:允许属于“用户”组的任何用户读取名为 MYPROJECT 的项目。我有
我正在使用 mosquitto 1.4.5 版本。 我正在尝试让一个单独的插件对 mosquitto 代理的主题订阅进行 ACL 检查,并使用提供的 header 进行发布。 只是为了测试 auth
大家好,这可能是一个愚蠢的问题,但我真的对 ACL、RBAC、DAC、MAC 感到困惑...... 以具有以下用户类型的在线大学管理系统为例: 管理员 房车 教职工 学生 他们每个人都有不同的访问权限
我是环回的新手。我已经为所有用户 ($everyone) 创建了拒绝权限的 ACL。但是我可以通过 swagger 访问所有 API。有人可以解释一下吗?以下是我的 ACL。谢谢。 "acls": [
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我们的应用程序使用一个组件,该组件需要我们的可执行文件所在目录中的许可证文件,它恰好是一个 .NET WinForms 应用程序,但我认为这对这个问题无关紧要。当安装在一些 XP Pro 机器上时(目
我正在使用 Web Deploy 将 Web 应用程序部署到我的主机。当使用 Publish 命令从 Visual Studio 运行时,它工作正常。当我尝试使用 MSBuild 的 web 部署进行
我刚刚开始使用 Grails,并且正在尝试配置 spring-security-acl 插件。我一直在关注official plugin tutorial但是在尝试运行我的应用程序时无法通过引导阶段(
谁能建议一种可扩展的设计模式来实现对照片和相册的访问控制,每个都有单独的隐私设置(即所有者、组成员、公开)? 我正在使用 CakePHP,我在 ACL 组件上阅读的示例似乎控制对 Controller
我一直在关注this guide加载我的菜单配置,我认为这是加载菜单的非常好的和干净的方式。 我的问题很简单,有没有办法以与配置数组和某种工厂相同的方式加载 ACL 配置? 如果没有,我如何加载 AC
New-Item -Type Directory -Path "C:\MyFolder" $Acl = Get-Acl "C:\MyFolder" $Ar = New-Object System.Se
在 android 中,我在后端使用 Parse 和 back4app.com,每当我在返回保存回调中使用 myParseobject.saveInBackground() 时,我都会收到错误消息,指
我有一个正在将数据帧写入 ADLS Gen2 存储中的文件的数据 block 笔记本。 它创建一个临时文件夹,输出文件,然后将该文件复制到一个永久文件夹。由于某种原因,该文件没有正确继承 ACL。它创
我陷入了两难的境地。我正在使用 spring-security-acl 及其 jdbc 实现。问题是,我在其他查询中使用 JPA 存储库 (Spring-data-jpa)。我认为,这没问题,因为 J
我有代码可以在“line vty”上查找“access-class”的名称 之后我能够找到 ACL,但随后我想检查 ACL 的每一行以验证“拒绝”和“允许”语句是否具有“log”关键字。如果条目上没有
我正在使用 Cloudera 的 Hadoop CDH 发行版,并且最近从 CDH3 升级到了 CDH4。 在 CDH3 中,我曾经能够将用户名添加到 hadoop-policy.xml 中,用于:
我是一名优秀的程序员,十分优秀!