我正在使用Azure AD B2C开发SPA作为身份提供商。我使用的是MSAL JavaScript library,而且它的工作正常。我可以为我的Web API后端创建用户,登录并获取访问权限。
目前唯一的问题是B2C端点没有返回刷新令牌,因此当访问令牌到期时,UserAgentApplication类中的acquireTokenSilent方法(用于使用刷新令牌刷新过期的访问令牌)将失败。 / p>
我在B2C中的应用程序配置了"包含Web应用程序/ Web API"和"允许隐式流"设置为"是"在其属性中。在API Access部分中," openid"和" offline_access"范围在"#访问用户的个人资料"下打勾。应用程序本身有"读","写"和" user_impersonation"范围(不确定是否重要)。
" offline_access"我的范围中包含了我的事件,我尝试创建一个应用程序,例如读/写范围,并包含它(作为" https://mytenant.onmicrosoft.com/testapp/offline_access")但似乎没有任何效果。响应永远不会有刷新令牌,也不会有id令牌而不是访问令牌。
我注意到当我转到我创建的SignUp-SignIn策略并尝试从那里运行端点时," offline_access"范围在下拉列表中甚至不可用。即使我复制"运行端点"在底部链接并在运行之前将范围添加到URL,响应不包含刷新令牌。
当我点击顶部的链接时,它似乎给了我一些关于端点的详细信息,并且只有" openid"受支持的范围。
不确定我在这里缺少什么,所以任何想法都会受到赞赏。
答案 0 :(得分:4)
立即运行 链接会生成一个使用implicit flow登录的身份验证请求。根据定义,隐式流量不允许您获取由于安全原因刷新令牌。因此,下拉列表不会为您提供footnotes
范围,因为它不起作用。如果您需要刷新令牌,则需要运行confidential code flow。如果您选择,可以通过手动修改“立即运行”链接生成的URL来执行此操作。具体来说,在URL中:
设置response_type =代码(非代币)
将“offline_access”添加到范围列表
获得代码后,按documentation所示发出POST请求,以交换代码以获取刷新令牌。