2017-08-13 151 views
0

我正在开发SPA,Azure AD B2C作为身份提供商。我正在使用MSAL JavaScript library,它大多工作正常。我可以创建用户,登录并为我的Web API后端获取访问令牌。Azure AD B2C未返回刷新令牌

目前唯一的问题是,B2C端点没有返回刷新令牌,所以当访问令牌到期时,UserAgentApplication类中的acquireTokenSilent方法失败,意味着使用刷新令牌刷新过期的访问令牌。

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

enter image description here

“offline_access”包含在我的范围,我试过事件创建应用程序之一,像读/写范围和包括以及(如“https://mytenant.onmicrosoft.com/testapp/offline_access”),但似乎没有任何工作。响应从来没有刷新令牌,既不是id令牌,也不是访问令牌。

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

enter image description here

当我点击顶部的链接,似乎给我关于端点和支持的范围下只有“OpenID的”是一些细节。

不知道我在这里失踪如此任何想法将不胜感激。

回答

2

立即运行链接生成使用implicit flow登录一个auth请求。隐流,顾名思义,不要让你获得一个刷新令牌由于安全方面的原因。因此,下拉不会给你offline_access范围,因为它不起作用。如果您需要刷新令牌,则需要运行confidential code flow。如果您选择,可以通过手动修改“立即运行”链接生成的URL来完成此操作。具体而言,在URL:

  1. 设置RESPONSE_TYPE =代码(不是令牌)

  2. 添加 “offline_access” 到范围

一旦你获得一个代码列表,使POST请求,如documentation所示,以交换刷新令牌的代码。