2017-03-14 70 views
1

作为我们Azure API管理设置的一部分,我们将oAuth 2.0与Active Directory结合使用。调用刷新令牌时,id_token格式错误

我们正在使用id_token(智威汤逊)进行身份验证,这是行之有效的。

我们可以通过重定向url(microsoft login)申请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格式不正确。

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

id_token返回,只有份(缺少签名),例如AAAA.BBBB。使用这种id_token时验证

,它显然失败:(

回答

1

我不知道为什么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网络令牌(JWT)的应用程序可以base64Url解码此标记的部分请求关于谁登录的用户信息的应用程序可以缓存。值并显示它们,但不应该将它们用于任何授权或安全边界。有关id_tokens的更多信息,请参阅v2.0端点标记引用。

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

+0

同意,通常访问令牌是什么刷新。但我会假设,如果一个id令牌不是要返回。不会有一个id标记,而不是一个畸形的标记。传递** openid **的范围是什么决定我想要一个id令牌。 – Mike

+0

更新了我的答案一些更多的信息 – sdoxsee

+0

我坚持这样一个事实,即开放式ID规范说'它*可能*不包含id_token'并且依赖于已经发送令牌的事实.vs没有令牌在所有。很可能,azure oauth2.0实现有问题(天堂禁止!),并且不应返回id_token。 – Mike