OAuth2.0在加密之前刷新令牌的内容格式应该是什么?

dvs*_*gec 4 oauth-2.0

我正在开发一个OAuth2.0服务器。刷新令牌的格式应该是什么以及应该使用什么加密算法进行加密?

ing*_*ous 5

OAuth 2.0 不强制执行有关令牌格式或加密的任何限制。规范中完全忽略了加密,因为通信应该通过 TLS 进行保护。

另外 -如果您确实不需要,请不要自己实现。如果您的资金允许,请选择开源库甚至供应商产品。

话虽这么说,请查看JWT RFC。这是大多数人使用的格式。您还可以考虑根本不使用任何格式,而只使用不透明字符串,然后在授权服务器中实现令牌自省。

至于加密——一切皆有可能。大多数实现至少支持 HS256、RS256 和 ES256 来签署 JWT 令牌。在大多数现实场景中,您不需要加密令牌,签名就足够了。


dvs*_*gec 5

经过一段时间的挣扎,我想通了。有两种方法

  1. 将构建访问令牌所需的所有内容(除了可以直接派生/计算的内容除外)放入刷新令牌中,并使用全局或租户级对称密钥对其进行加密

    好处:

    A。无需存储

    b. 更好的性能,因为不需要与数据库接触。这只是解密和创建访问令牌

    问题/缺点

    A。无法跟踪发布的刷新令牌。

    b. 无法使已颁发的刷新令牌失效。

  2. 将与刷新令牌相关的属性存储在数据库中并响应OAuth服务器,返回加密的刷新令牌ID。可能存储在数据库中的属性是

    身份证号|| 到期|| 代币数量 || 主题 || 客户端 ID || 自定义属性(如果需要)

我们还可以实现其他属性,但这必须为想要实现自己的刷新令牌流程的人们提供一些想法

  • 如果您没有将刷新令牌存储在有状态的位置(例如数据库),那么实际上甚至不需要刷新令牌。我们拥有这种额外复杂性的原因是能够撤销访问权限。据我所知,让令牌和刷新令牌都是无状态的绝对没有任何作用 (3认同)