2016-03-03 82 views
0

我根据一些文档创建了一个B2C设置。我已经提到以下链接。Azure AD B2C在id_token之前用“#”重定向

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/”

,并使用谷歌作为我的身份提供商。但是,当我进行注册/登录时,系统会将我从注册/登录页面重定向到

“http s://mycompany.com/login/#id_token=eyJ0eXAi ...“

B2C返回的重定向URL包含一个”id_token“变量,并在”http://calebb.net/“中检查它时,它所包含的详细信息与预期一致。

我的问题是在redirect_uri之后和id_token变量之前的散列“#”标记。由于哈希,id_token变量不会发送到我们的服务器,因为浏览器的默认行为是在哈希标记之后不发送任何内容。哈希标记是一个片段标识符。

因此我无法获得id_token的值。

有没有办法克服这个限制,以便我们的服务器应用程序可以从B2C系统返回的URL中获取id_token的值?或者这就像是需要修复的B2C中的错误?

我正在使用Python/Django Web应用程序。

谢谢。

回答

0

我还没有被允许发表评论,所以我必须把我的评论放在答案中。 几分钟前,我和NodeJS B2C样本有同样的问题。我把POST路线上你有什么HTTP S://mycompany.com/login/端点

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。

1

我不能也发表评论,

如果使用AngularJS的前端然后启用HTML5模式。

我用这个$locationProvider.html5Mode(true);

根据AngularJS: Developer Guide

在HTML5模式下,$位置服务getter和setter通过HTML5历史API与 浏览器的URL地址进行交互。这允许 使用常规URL路径和搜索片段,而不是它们的hashbang 等效项。如果浏览器不支持HTML5 History API,则 $ location服务将自动退回到使用hashbang URL 。这使您无需担心显示应用的 浏览器是否支持历史API; $ location服务透明地使用最佳可用选项。

旧版浏览器打开一个普通的URL - >重定向到一个现代浏览器hashbang URL开幕hashbang URL - >重写到正规 URL注意,在这种模式下,角拦截所有链接(受 的下面的“Html链接重写”规则),并以一种不会执行整页重新加载的方式更新网址 。

+0

您能否解释为什么启用HTML5模式有助于解决OP的问题?这可能会带来更好的答案/解决方案。 – Castaglia