在Azure AD B2C中刷新令牌撤销

时间:2019-02-26 14:18:51

标签: azure-active-directory azure-ad-b2c

在我的AD B2C应用程序中,我需要撤消AD B2C为用户提供的所有刷新令牌。这是实现的要求,因为当用户帐户登录多个应用程序并且一个应用程序用户更改了密码时。更改密码后,我已撤消了他提供给其他应用程序的所有刷新令牌。 该怎么做?

更新
我已经尝试追踪,

  1. B2C-通过策略获取令牌
    https://login.microsoftonline.com/te/tenantname.onmicrosoft.com/b2c_1a_policyname/oauth2/v2.0/authorize
    https://login.microsoftonline.com/te/tenantname.onmicrosoft.com/b2c_1a_policyname/oauth2/v2.0/token
    a)使用ad b2c用户帐户获得访问令牌和刷新令牌(直接通过租户创建,而不是通过注册策略创建的)。
    b)尝试通过使用令牌端点和grant_type refresh_token->能够获得令牌的方式来获得新的访问权限并刷新令牌
    c)使用https://graph.windows.net/myorganization/users/xxxxx-userObjectID-xxxx/invalidateAllRefreshTokens?api-version=1.6撤销了令牌 和客户端凭据流(在Ad B2C租户的AD刀片中注册并有权访问图API的应用程序)
    d)令牌撤销api调用成功,并尝试了步骤(b)。
    e)仍然能够从步骤(b)获取新令牌

  2. B2C-按策略获取令牌-使用GA帐户撤消
    https://login.microsoftonline.com/te/tenantname.onmicrosoft.com/b2c_1a_policyname/oauth2/v2.0/authorize
    https://login.microsoftonline.com/te/tenantname.onmicrosoft.com/b2c_1a_policyname/oauth2/v2.0/token
    a)使用ad b2c用户帐户获得访问令牌和刷新令牌(直接通过租户创建,而不是通过注册策略创建的)。
    b)尝试通过使用令牌端点和grant_type refresh_token->能够获得令牌的方式来获得新的访问权限并刷新令牌
    c)使用https://graph.windows.net/myorganization/users/xxxxx-userObjectID-xxxx/invalidateAllRefreshTokens?api-version=1.6撤销了令牌 并使用直接在租户中创建的GA帐户登录到图api资源管理器来完成。
    d)令牌撤销api调用成功,并尝试了步骤(b)。
    e)仍然能够从步骤(b)中获取新令牌

  3. B2C-无需令牌即可获取令牌
    https://login.microsoftonline.com/tenantname.onmicrosoft.com/oauth2/v2.0/authorize
    https://login.microsoftonline.com/tenantname.onmicrosoft.com/oauth2/v2.0/token
    a)使用ad b2c用户帐户获得访问令牌和刷新令牌(直接通过租户创建,而不是通过注册策略创建的)。
    b)尝试通过使用令牌端点和grant_type refresh_token->能够获得令牌的方式来获得新的访问权限并刷新令牌
    c)使用https://graph.windows.net/myorganization/users/xxxxx-userObjectID-xxxx/invalidateAllRefreshTokens?api-version=1.6撤销了令牌 和客户端凭据流(在Ad B2C租户的AD刀片中注册并有权访问图API的应用程序)
    d)令牌撤销api调用成功,并尝试了步骤(b)。
    e)无法从步骤(b)

  4. 获取新令牌
  5. B2C-无需令牌即可获取令牌-使用GA帐户撤消
    https://login.microsoftonline.com/tenantname.onmicrosoft.com/oauth2/v2.0/authorize
    https://login.microsoftonline.com/tenantname.onmicrosoft.com/oauth2/v2.0/token
    a)使用ad b2c用户帐户获得访问令牌和刷新令牌(直接通过租户创建,而不是通过注册策略创建的)。
    b)尝试通过使用令牌端点和grant_type refresh_token->能够获得令牌的方式来获得新的访问权限并刷新令牌
    c)使用https://graph.windows.net/myorganization/users/xxxxx-userObjectID-xxxx/invalidateAllRefreshTokens?api-version=1.6撤销了令牌 使用直接在租户中创建的GA帐户登录到图api资源管理器即可完成。
    d)令牌撤销api调用成功,并尝试了步骤(b)。
    e)仍然能够从步骤(b)中获取新令牌

基本上无法撤消从b2c策略工作流程创建的令牌。

解决方案:
刷新令牌吊销图表API正常工作。但是大约要花5分钟。
但是这里的问题是在等待期间之间,我能够获取新的刷新令牌和访问令牌,并且这些新的刷新令牌即使在吊销后仍在工作。这意味着Azure AD考虑了刷新令牌撤消api调用的请求时间,并撤消了在该时间之前发出的所有刷新令牌。
那么如何避免呢?
当使用现有的刷新令牌在脱机范围内请求新的访问令牌时,即使现有的刷新令牌具有有效时间,Azure AD为什么也提供新的刷新令牌??

1 个答案:

答案 0 :(得分:1)

您可以invalidate all of the refresh tokens for a specific user使用Azure AD Graph API:

POST https://graph.windows.net/myorganization/users/{user_id}/invalidateAllRefreshTokens?api-version=1.6