我根据一些文档创建了一个B2C设置。我已经提到了以下链接。
https://blogs.technet.microsoft.com/ad/2015/09/16/azure-ad-b2c-and-b2b-are-now-in-public-preview/
所以我设置了一个redirect_uri,比方说,
“http s://mycompany.com/login/”
并使用Google作为我的身份提供商。但是,当我进行注册/登录时,系统会将我从注册/登录页面重定向到
“http s://mycompany.com/login/#id_token=eyJ0eXAi ......”
B2C返回的重定向网址包含“id_token”变量,在“http://calebb.net/”中检查后,其中包含的详细信息与预期一致。
我遇到的问题是在redirect_uri之后和id_token变量之前使用散列“#”标记。由于哈希,id_token变量不会发送到我们的服务器,因为浏览器的默认行为是在哈希标记之后不发送任何内容。哈希标记是片段标识符。
因此我无法获得id_token的值。
有没有办法克服这个限制,以便我们的服务器应用程序可以从B2C系统返回的URL获取id_token的值?或者这就像B2C中的一个需要修复的错误?
我正在使用Python / Django Web应用程序。
感谢。
答案 0 :(得分:1)
我也不允许发表评论,
如果您使用AngularJS作为前端,请启用HTML5
模式。
我已使用此$locationProvider.html5Mode(true);
在HTML5模式下,$ location服务getter和setter与之交互 浏览器URL地址通过HTML5历史记录API。这允许 使用常规URL路径和搜索段,而不是他们的hashbang 等价物。如果浏览器不支持HTML5 History API, $ location服务将回退到使用hashbang URL 自动。这让你不必担心是否 显示您的应用的浏览器是否支持历史记录API;该 $ location服务透明地使用最佳可用选项。
在旧版浏览器中打开常规网址 - >重定向到hashbang URL在现代浏览器中打开hashbang URL - >重写为常规 URL请注意,在此模式下,Angular会拦截所有链接(受制于 下面的“Html链接重写”规则)并以某种方式更新URL 从不执行整页重新加载。
答案 1 :(得分:1)
在策略链接URL中将“ response_mode”参数值传递为“ query”或“ form_post”,以解决#问题。
答案 2 :(得分:0)
我(还)不允许发表评论,所以我必须回答我的评论。 几分钟前我遇到了与NodeJS B2C样本相同的问题。我在你的 http s://mycompany.com/login/ 端点上放置了一条POST路由
app.post('/',
passport.authenticate('azuread-openidconnect', { failureRedirect: '/login' }),
function(req, res) {
log.info('We received a POST from AzureAD.');
log.info(req.body.id_token);
res.redirect('/');
});
然后将其导入护照JavaScript库进行身份验证。
可能这会给你一个指示,你可以把它转移到Python / Django。