作为Azure API管理设置的一部分,我们将oAuth 2.0与Active Directory结合使用。
我们使用 id_token (JWT)进行身份验证,效果很好。
我们可以通过重定向网址(微软登录)请求 id_token ,此令牌可用于成功调用我们的API(再次验证我们的API政策)。
当我们想要刷新令牌时会出现问题。
正如您所看到的,我返回 id_token (因为范围 openid 已通过),但问题是, id_token 是格式错误。
而不是组成 3 部分,例如的 AAAA.BBBB.CCCC
id_token 返回,只有 2 部分(缺少签名),例如的 AAAA.BBBB。
使用此 id_token 进行身份验证时,显然会失败:(
答案 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时所有注意都是关闭的。
" id_token - 未签名的JSON Web令牌(JWT)。该应用程序可以base64Url解码此令牌的各个部分,以请求有关登录用户的信息。该应用程序可以缓存值并显示它们,但它不应该依赖它们来获取任何授权或安全边界。有关id_tokens的更多信息,请参阅v2.0端点令牌引用。"
注意它没有签名。这是你失去了jwt的第三部分。