我正在使用Azure AD B2C示例,并且出于测试目的,我正在使用经过稍微修改的“单页”应用sample。我还创建了一个Azure B2C和一个测试api(作为Azure函数)。测试API和“单页”应用程序已在Azure B2C中注册为正确的应用程序,并且安装程序正常运行。
方案是用户在Azure B2C中登录,获取令牌并使用令牌调用Azure函数。 问题是登录页面在单独的窗口中打开,地址栏中显示了B2C网址。我想要的是将登录控件嵌入到“单页应用”中。
我仔细阅读了文档,发现可以自定义登录页面(在“用户流策略/页面布局”中),但看来它仍然是单独的页面,我不希望这样。另一个想法是让“单页应用程序”将登录请求作为AJAX请求发送到我自己的服务器,然后该服务器代表该用户执行登录,然后将令牌中继回“单页应用程序”。但这似乎有很多麻烦和不必要的间接,我想尽可能避免。
答案 0 :(得分:0)
当前,单页应用程序无法嵌入登录体验,因为Azure AD B2C不允许CORS或iframing,这意味着您可以使用以下选项:
答案 1 :(得分:0)
出于安全原因,Azure B2C服务不允许您这样做。按照他们的FAQ:
我的应用程序可以在iFrame中打开Azure AD B2C页面吗?
否,出于安全原因,无法在其中打开Azure AD B2C页面 iFrame。我们的服务与浏览器进行通讯以禁止 iFrame。一般的安全社区和OAUTH2 规范,建议不要使用iFrame进行标识 由于存在点击劫持的风险。
这是为了将密码保留为用户和B2C之间的共享机密。在这种模式下,您的站点根本无法访问密码,它只能知道身份验证的结果。
答案 2 :(得分:0)
我认为 Azure AD B2C 中有一项处于“公共预览”阶段的新功能,允许您在页面中嵌入 iframe。然而,很少有考虑。
<块引用>功能描述here