我们正在使用Azure活动目录Oauth代码流来对用户进行身份验证。我们使用代码获取了access_token,id_token和refresh_token(在重定向URL上获取了它)。成功认证后,我们将使用id_token来授权每个请求,并且我们可以使用从/discovery/v2.0/keys
api中获得的公钥来验证JWT。
现在,JWT将在1小时后过期。因此我们需要刷新此id_token。
我正在使用下面的cURL刷新id_token
curl --request POST \
--url https://login.microsoftonline.com/{tenant_id}/oauth2/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'client_id=client%20id&refresh_token=refesh%20token%20&grant_type=refresh_token&client_secret=client_secret&scope=openid
在此API的响应中,我们获得了access_token,refresh_token,id_token,但是如果您观察到id_token,它不包含JWT签名(JWT的第三部分),没有签名我们就无法验证JWT
我们找不到任何文档参考,为什么id_token没有签名部分。还有其他刷新id_token的方法吗?如果无法刷新id_token,是否有任何解决方法?
[在某些情况下,可能会返回没有签名的Id令牌,特别是如果它是通过带有客户机密的反向渠道获得的,则尤其如此。您已经通过授权机构通过加密通道获取令牌。如果某人能够在此处注入内容,他们也将能够指导您的应用程序对OpenID元数据的请求,从而替换您的应用程序期望的签名密钥。因此,签名在这里不会增加太多价值。
[此外,您不应将ID令牌发送到任何API,因为ID令牌不应用于授权。这就是访问令牌的作用:)
((我将去看一下OpenID Connect规范,看看它是否对此有任何说明)