双向应用
private_key_jwt
身份验证方法有什么附加价值?
目前我正在处理从here记录的 API 进行消费。身份验证通过应用
private_key_jwt
client_assertion
来建立客户端身份来进行。
但是,规范还指出服务器端在响应正文中以 json 形式返回自己的签名令牌。我不明白返回编码的
private_key_jwt
的附加价值。有好处吗?安全?
我直觉地期望响应是一个简单的 json 响应。不是 json Web 令牌中编码的有效负载。
免责声明;我不是安全专家,所以我这边的逻辑错误是预料之中的。
客户秘密
开始使用 OAuth 时,您使用客户端密钥。这是一个在客户端和授权服务器中配置相同的字符串:
curl --request POST "https://login.example.com/oauth/token"
-H "content-type: application/x-www-form-urlencoded" \
-d grant_type=client_credentials \
-d client_id=my_client \
-d client_secret=my_client_secret \
-d scope=orders
优点是易于管理,但有以下缺点:
客户主张
private_key_jwt 或
client assertion
是更强大的客户端凭证。发送令牌请求时只有几个字段发生变化,并且返回与使用客户端密钥时相同的令牌响应:
curl --request POST "https://login.example.com/oauth/token"
-H "content-type: application/x-www-form-urlencoded" \
-d grant_type=client_credentials \
-d client_assertion=my_assertion \
-d client_assertion_type='urn:ietf:params:oauth:client-assertion-type:jwt-bearer' \
-d scope=orders
它具有这些优点,但客户现在必须管理并偶尔更新私钥: