Azure AD B2C在id_token之前使用“#”重定向

时间:2016-03-03 08:31:57

标签: python django azure-ad-b2c

我根据一些文档创建了一个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应用程序。

感谢。

3 个答案:

答案 0 :(得分:1)

我也不允许发表评论,

如果您使用AngularJS作为前端,请启用HTML5模式。

我已使用此$locationProvider.html5Mode(true);

根据AngularJS: Developer Guide

  

在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”,以解决#问题。

有关更多信息,请查看:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oauth-code

答案 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。