如果在Azure活动目录中刷新id_token,如何验证签名

问题描述 投票:1回答:1

我们正在使用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

sample response of refresh token API

我们找不到任何文档参考,为什么id_token没有签名部分。还有其他刷新id_token的方法吗?如果无法刷新i​​d_token,是否有任何解决方法?

azure oauth-2.0 jwt azure-active-directory openid
1个回答
0
投票

[在某些情况下,可能会返回没有签名的Id令牌,特别是如果它是通过带有客户机密的反向渠道获得的,则尤其如此。您已经通过授权机构通过加密通道获取令牌。如果某人能够在此处注入内容,他们也将能够指导您的应用程序对OpenID元数据的请求,从而替换您的应用程序期望的签名密钥。因此,签名在这里不会增加太多价值。

[此外,您不应将ID令牌发送到任何API,因为ID令牌不应用于授权。这就是访问令牌的作用:)

((我将去看一下OpenID Connect规范,看看它是否对此有任何说明)

© www.soinside.com 2019 - 2024. All rights reserved.