多种访问模式的授权

时间:2019-03-18 07:26:50

标签: authorization graphql

我有一个使用Graphene和Flask构建的GraphQL API。该API当前仅用作网站的后端,并且包含搜索,创建订单等操作。某些操作是完全公开的,某些操作仅限于登录用户。目前,我使用JWT令牌进行用户身份验证。我想合并另一级别的授权,这是考虑到请求的来源。我看到的所有示例仅使用一个维度-用户。有一个已登录用户(可能具有某些角色/作用域)或没有用户。这就是我目前所执行的。但是,我想引入另一个维度-起源。几个例子:

  • 我想对来自未知来源的请求的限制等级与来自网站(可信来源)的请求不同。
  • 我希望在未经用户身份验证的情况下允许网站进行受限操作(例如创建匿名订单),但是当请求来自未知位置时,我会完全禁止此操作。
  • 我想限制来自未知位置的请求的搜索请求结果的数量(防止伪抓取),同时允许来自网站的无限结果。

我可以想到几种方法,但我不太喜欢其中的一种方法:

  • 创建两个API-一个公共和一个私有(仅网站)。恕我直言,这会导致不必要的重复。
  • 即使从受信任的网站也使用相同的登录过程,并分配一些 admin JWT令牌。这具有错误的语义并且不安全。

如何解决此类问题的实际标准是什么?

1 个答案:

答案 0 :(得分:0)

使用API​​网关-部分是它们的用途。例如,看看Kong或Apigee。还有很多。

用于基本访问控制,例如匿名与认证或限制,他们应该能够处理。有关其他授权方案,请查看基于属性的访问控制()。这是一种使用编写的策略来实现外部授权的方法。这样您就可以处理任何类型的授权。我为Axiomatics工作的公司专门从事API授权。我们使用ALFA并与Kong之类的东西整合(他们进行拦截)。<​​/ p>