调用刷新令牌时,id_token格式错误

时间:2017-03-14 16:59:50

标签: azure oauth-2.0 azure-api-management

作为Azure API管理设置的一部分,我们将oAuth 2.0与Active Directory结合使用。

我们使用 id_token (JWT)进行身份验证,效果很好。

我们可以通过重定向网址(微软登录)请求 id_token ,此令牌可用于成功调用我们的API(再次验证我们的API政策)。

当我们想要刷新令牌时会出现问题。

我们遵循以下流程: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code#refreshing-the-access-tokens

Refresh Token Request

正如您所看到的,我返回 id_token (因为范围 openid 已通过),但问题是, id_token 是格式错误。

而不是组成 3 部分,例如的 AAAA.BBBB.CCCC

id_token 返回,只有 2 部分(缺少签名),例如的 AAAA.BBBB。

使用此 id_token 进行身份验证时,显然会失败:(

1 个答案:

答案 0 :(得分:2)

我不确定为什么id_token只有两个部分但是不是你应该发送来授权请求​​的访问令牌?也许id_token工作得更早,因为它是由适当的授权服务器签名但应该一直是访问令牌?它毕竟是刷新的访问令牌。

我假设您发送了" offline_access"当您最初获得有效的id_token,access_token和refresh_token时,作为您的范围之一,或者您不应该收到refresh_token。 https://tools.ietf.org/html/rfc6749#section-6表示如果您在刷新请求中提供范围,则您的访问令牌不应限于刷新请求中提供的范围。 openid连接规范(http://openid.net/specs/openid-connect-core-1_0.html#RefreshTokenResponse)表示刷新请求与令牌请求类似,除非它"可能不包含id_token"。在我看来,除非它是Azure中特定于实现的功能,否则在刷新响应中期望id_token时所有注意都是关闭的。

更新 来自https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-oauth-code#refresh-the-access-token

" id_token - 未签名的JSON Web令牌(JWT)。该应用程序可以base64Url解码此令牌的各个部分,以请求有关登录用户的信息。该应用程序可以缓存值并显示它们,但它不应该依赖它们来获取任何授权或安全边界。有关id_tokens的更多信息,请参阅v2.0端点令牌引用。"

注意它没有签名。这是你失去了jwt的第三部分。