【问题标题】:Azure AD B2C Not Returning Refresh TokensAzure AD B2C 不返回刷新令牌
【发布时间】:2018-01-21 15:55:09
【问题描述】:

我正在开发一个以 Azure AD B2C 作为身份提供者的 SPA。我正在使用MSAL JavaScript library,它大部分工作正常。我可以为我的 Web API 后端创建用户、登录并获取访问令牌。

目前唯一的问题是 B2C 端点没有返回刷新令牌,因此当访问令牌过期时,UserAgentApplication 类中的 acquireTokenSilent 方法(旨在使用刷新令牌刷新过期的访问令牌)失败。

我在 B2C 中的应用程序在其属性中配置了“包括 Web 应用程序/Web API”和“允许隐式流”设置为“是”。在 API 访问部分,“openid”和“offline_access”范围都在“访问用户的个人资料”下打勾。应用程序本身具有“读取”、“写入”和“用户模拟”范围(不确定这是否重要)。

“offline_access”包含在我的作用域中,我尝试创建一个应用程序,例如读/写作用域并包含它(如“https://mytenant.onmicrosoft.com/testapp/offline_access”),但似乎没有任何效果。响应永远不会有刷新令牌,无论是 id 令牌还是访问令牌。

我注意到,当我转到我创建的 SignUp-SignIn 策略并尝试从那里运行端点时,下拉菜单中甚至没有“offline_access”范围。即使我复制底部的“运行端点”链接并在运行之前将范围添加到 URL,响应也不包含刷新令牌。

当我点击顶部的链接时,它似乎给了我一些关于端点的详细信息,并且只有“openid”在受支持的范围内。

不确定我在这里缺少什么,所以任何想法都会受到赞赏。

【问题讨论】:

    标签: oauth-2.0 openid-connect azure-ad-b2c msal


    【解决方案1】:

    立即运行链接生成一个使用implicit flow 登录的身份验证请求。根据定义,隐式流不允许您获取刷新令牌由于安全原因。因此,下拉列表不会为您提供offline_access 范围,因为它不起作用。如果你想要一个刷新令牌,你需要运行confidential code flow。如果您选择这样做,您可以通过手动修改“立即运行”链接生成的 URL 来执行此操作。具体来说,在 URL 中:

    1. 设置 response_type=code(不是令牌)

    2. 将“offline_access”添加到范围列表中

    获得代码后,如documentation 所示发出 POST 请求,以将代码交换为刷新令牌。

    【讨论】:

    • 即使不改变 response_type 对我也很有效。将范围参数值设置为“offline_access user.read”(不带引号)就像一个魅力
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2021-10-26
    • 2018-09-03
    相关资源
    最近更新 更多