authorization - 多种访问模式的授权
问题描述
我有一个使用 Graphene 和 Flask 构建的 GraphQL API。该 API 目前仅用作网站的后端,包含搜索、创建订单等操作。有些操作是完全公开的,有些仅限于登录用户。目前,我使用 JWT 令牌进行用户身份验证。我想加入另一个级别的授权,那就是考虑到请求的来源。我见过的所有例子都只使用一个维度——用户。要么有一个登录用户(可能有一些角色/范围),要么没有。这是我目前实施的。但是,我想加入另一个维度——起源。几个例子:
- 我想对来自未知来源的限制请求与来自网站的请求(可信来源)不同的评级。
- 我想在没有用户身份验证的情况下允许来自网站的受限操作(例如创建匿名订单),但当请求来自未知位置时完全禁止此操作。
- 当请求来自未知位置(虚拟抓取预防)时,我想限制搜索请求结果的数量,同时允许来自网站的无限结果。
我能想到几种方法,但我不太喜欢其中任何一种:
- 创建两个 API - 一个公共的和一个私有的(仅限网站)。恕我直言,这将导致不必要的重复。
- 即使从受信任的网站也使用相同的登录过程并分配一些管理员JWT 令牌。这具有错误的语义并且不安全。
如何解决此类问题的事实标准是什么?
解决方案
使用 API 网关——这就是它们的部分用途。例如,查看 Kong 或 Apigee。还有很多。
对于基本的访问控制,例如匿名与认证或限制,他们应该能够处理。对于其他授权方案,请查看基于属性的访问控制 ( abac )。这是一种使用alfa编写的策略来实现外部化授权的方法。这将让您处理任何类型的授权。我工作的公司Axiomatics专门从事 API 授权。我们使用 ALFA 并与 Kong 之类的工具集成(他们进行拦截)。
推荐阅读
- python - 如何在学习曲线图中制作平坦的验证准确度曲线
- python - 如何在 python vlc 中获取音频的频率、音高、低音等?
- c++ - 编译时未定义 C++ 基类
- c++ - 如何连接Cpp中的变量名称?
- swift - 领域(10.1.0)“找不到框架领域同步”
- php - WooCommerce - 如何调用 Xero 操作
- sql - SQL查询多个表以找到对应/相关的值
- python - _tkinter.TclError:找不到包通讯
- discord - 如何使用 discord.py 创建文本频道?
- scala - com.lightbend.lagom.internal.scaladsl.registry.ScalaServiceRegistryClient [] - 未找到 serviceName=[elastic-search]