正确的API授权策略

时间:2019-10-30 12:17:06

标签: security oauth jwt graphql openid-connect

我想设计一个GraphQL API。该API将被某些浏览器应用程序使用,并且也开放给希望创建自己的脚本/生成报告等的人直接使用。该API将依赖于支持Oauth Openid Connect(okta)的第三方应用程序来用作用户和角色管理。它会用Django编写。

因为推荐使用JWT保护GraphQL API,而且因为OIDC使用JWT令牌。我想到了一种简单的方法,其中API将只接受okta发行的JWT令牌。这可行,但是当API要求okta验证令牌时,我会看到很多延迟(此延迟在生产中可能会更小,因为我正在免费试用auth0而不是生产okta上进行测试)。因此,我认为也许我的API应该发布自己的JWT令牌。我在这里可以想到三种策略:

  1. 保持原状–仅使用OIDC JWT。
  2. 引入一个登录突变或一个登录REST端点,该端点将接受上面的OIDC并发出可用于所有其他操作的JWT。
  3. 如上所述,但也允许直接使用okta的JWT(我不确定我是否可以在Django的auth系统中实现它,因此,如果识别出令牌,则不会调用OIDC)。

这三种方法中哪一种是保护我的API的正确方法(也许是OIDC设计者想要的)?

1 个答案:

答案 0 :(得分:1)

JWT令牌不需要由Okta(通常由IdP)验证。您只需要获取使用过的公共密钥(可以在发现响应中找到jwks url),然后可以在没有任何IdP调用的情况下验证签名。

恕我直言,您可以轻松获得2-4k验证/秒。