如何区分来自API合作伙伴的JSON Web令牌或来自我自己的前端客户端的令牌?

时间:2017-01-25 19:13:14

标签: ruby-on-rails json api jwt

根据https://jwt.io,JSON Web Tokens应通过以下标头传递:

Authorization Bearer <token>

我也希望将JSON Web令牌用于我的客户端API密钥。

如果每个客户端使用不同的密钥来编码JSON Web令牌,我怎么知道用于解码令牌的密钥?在为API使用JSON Web令牌时,人们通常如何处理这个问题?

我考虑过为所有请求使用单个密钥,但这意味着如果该密钥遭到破坏并且我必须更新它 - 任何使用我的API的人都必须获得一个新的Web令牌。

1 个答案:

答案 0 :(得分:0)

您可以考虑两种使用方案。在fisrt中,您需要在客户端获取凭据后发出JWT,第二个客户端构建JWT并使用其密钥对其进行签名。

从服务器发布JWT

在这种情况下,发布JWT的服务会验证请求者的身份,例如需要先前提供的用户和密码。

JWT将在sub(主题)声明中包含客户端标识符。您可以设置aud(受众群体)以将令牌的使用情况设置为您的API,而不是前端。您也可以设置自定义声明

所有令牌都使用相同的密钥签名。它可能与用于签署前端令牌的密钥不同。如果您需要aClient验证JWT

,请使用密钥对

客户问题JWT

在这种情况下,每个客户端都有自己的秘密,或者如果使用不对称密钥,则注册了一个与其拥有的私钥对应的公钥

已生成密钥并通过管理控制台

共享密钥

JWT的sub声明确定了作为JWT主题的主体。服务器将使用客户端的密钥/公钥验证签名。

如果您还使用JWT作为前端,iss(发行人)声明允许区分您发出的或由第三方发行的令牌

注意:JWT在RFC 7519中定义。建议使用承载令牌,但这些令牌不是强制性的