无法从 Azure B2C 获取刷新令牌

Posted

技术标签:

【中文标题】无法从 Azure B2C 获取刷新令牌【英文标题】:Unable to get Refresh token from Azure B2C 【发布时间】:2020-02-19 09:01:57 【问题描述】:

谁能告诉我从 Azure B2C 获取刷新令牌的步骤,尽管我们已经从 Azure B2C 获得了授权令牌。

我们按照以下用户流程从 Azure B2C 获取活动令牌,但我们没有收到刷新令牌

https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=feerer72-615a-4851-af2b-78786bhgg
&response_type=id_token+token
&redirect_uri=https%3A%2F%2Fjwt.ms
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=defaultNonce
&p=userflowName

说明: 已授予 azure B2C 租户的所有权限,如下面的屏幕截图所示:

所以请谁能告诉我如何接收刷新令牌作为响应,以便我可以使用该刷新令牌从 Azure B2C 获取另一个活动令牌,而无需登录 Azure B2C 上的用户。

注意: 检查下面给出的响应: 我们正在获取 Active Token 但没有收到 Refresh Token


  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
.
  "exp": 1582120656,
  "nbf": 1582034256,
  "ver": "1.0",
  "iss": "https://tenant.b2clogin.com/c9fabc17-7ff9-4cdf17-b175-945gfgdf9ac/v2.0/",
  "sub": "842e9ee3-28dfd02-4a29-ba95-b5228616e9fe",
  "aud": "fecd3e72-615a-4851-af2b-d2b5171735erer4d",
  "nonce": "defaultNonce",
  "iat": 1582034256,
  "auth_time": 1582034256,
  "oid": "898hfhfe3-2802-4a29-ba95-b5228616e9fe",
  "emails": [
    "nikhil.sharma@gmail.com"
  ],
  "tfp": "B2C_1_Sign_Up_Policy",
  "c_hash": "vAb2w438XDmZpZBzEYMcZ2rA"

【问题讨论】:

【参考方案1】:

其实很简单,只需要了解通过refresh_token获取access_token的方法即可。 完整的流程由三个步骤组成。

1) 通过将应用程序重定向到 Azure 登录屏幕从 Azure 用户流中获取代码。这将是一个 GET 请求。

https://tenant.b2clogin.com/tenant.onmicrosoft.com/userflow/oauth2/v2.0/authorize?
client_id=abcd3e72-615a-8745-af2b-d2b51717354d
&response_type=code
&redirect_uri=https%3A%2F%2Fjwt.ms
&response_mode=query
&scope=abcd3e72-615a-8745-af2b-d2b51717354d%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response

成功登录后,Azure 使用查询字符串中的代码参数重定向。

2) 使用上面的代码通过下面的 POST URL 请求获取 access_token 和 refresh_token。

https://tenant.b2clogin.com/tenant.onmicrosoft.com/userflow/oauth2/v2.0/token

3) access_token 到期后,使用 refresh_token 和下面的 POST URL 来获取访问令牌和刷新令牌。

https://tenant.b2clogin.com/tenant.onmicrosoft.com/userflow/oauth2/v2.0/token

【讨论】:

【参考方案2】:

尝试使用以下端点发出相同的请求,并检查您是否在响应中获得刷新令牌:

https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/token

如果没有,那么您的 AD B2C 实例可能存在一些错误配置。

【讨论】:

以上是关于无法从 Azure B2C 获取刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

在 Postman 中为 Azure AD B2C 请求访问令牌

保护 Azure Active Directory B2C 访问令牌和刷新令牌

Azure AD B2C OpenID Connect 刷新令牌

Azure AD B2C 刷新令牌/ID 令牌 iOS Swift 4

Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明

用于Azure B2C acces令牌的Exchange Facebook SDK acces令牌