2016-03-03 66 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