无法从 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