HTTP标头,允许客户端选择JWT算法

时间:2018-10-12 12:23:49

标签: http jwt

我有一个为用户生成令牌的资源。我想增加选择令牌生成算法的可能性。

我无法更改请求结构,但可以使用算法名称添加一些HTTP标头。我的问题是选择哪个标题? Accept是否可以接受?

我目前使用Accept-Token-Algorithm标头发送RS256HS256之类的值。

2 个答案:

答案 0 :(得分:5)

  

我的问题是选择什么标题? Accept是否可以接受?

没有standard header用于此目的。

如果两者客户端和服务器同意Accept-Token-Algorithm,那似乎是合理的选择。更具描述性(且冗长)的替代方法是Accept-Token-Signature-Algorithm(假设JWT实际上是JWS)和Accept-Token-Encryption-Algorithm(对于JWE)。

请记住,您的API与其提供的文档一样好,并且自定义标头对API使用者而言并不明显。因此,请确保对其进行正确记录。


如果请求中没有所需的标题,您还应该考虑使用默认算法,并确保您验证收到的值。有关每种用途的有效算法列表,请参见RFC 7518


有关如何为JWT选择算法的详细信息,请查看this page

答案 1 :(得分:1)

如果您需要向请求中添加自定义标头,请参见Custom HTTP headers : naming conventions

话虽这么说,我看不出客户端选择签名算法的任何理由。签名选择应由签发它的服务决定,并应取决于该服务可接受的安全权衡。

接受此令牌的API应该能够验证此令牌的签名。因此,使用此令牌的API应该能够接受相同的加密算法,并且应该有权访问颁发该令牌时使用的相应公钥(或共享机密)。

如果令牌的内容(有效负载)对中介方有用,则可以在不了解用于签名密钥的加密算法的情况下将其解码(base64)。

如果令牌是为第三方服务发行的(例如在oauth2协议中),则对于此类参与者,令牌应该是不透明的。