我有一个为用户生成令牌的资源。我想增加选择令牌生成算法的可能性。
我无法更改请求结构,但可以使用算法名称添加一些HTTP标头。我的问题是选择哪个标题? Accept
是否可以接受?
我目前使用Accept-Token-Algorithm
标头发送RS256
和HS256
之类的值。
答案 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协议中),则对于此类参与者,令牌应该是不透明的。