Azure AD B2C 不返回刷新令牌

Ser*_*tal 6 oauth-2.0 openid-connect azure-ad-b2c azure-ad-msal

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

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

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

在此处输入图片说明

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

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

在此处输入图片说明

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

不确定我在这里遗漏了什么,所以任何想法都将不胜感激。

Par*_*akh 9

立即运行链接生成AUTH请求使用的隐含流登录。隐流,顾名思义,不要让你获得一个刷新令牌由于安全方面的原因。因此,下拉菜单不会为您提供offline_access范围,因为它不起作用。如果要刷新令牌,则需要运行机密代码流。如果您选择这样做,您可以通过手动修改“立即运行”链接生成的 URL 来执行此操作。具体来说,在 URL 中:

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

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

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