2014-10-28 93 views
2

我們有一個站點依賴使用Active Directory聯合身份驗證服務(ADFS)和WSFederationAuthenticationModule的聯合身份驗證。當ADFS驗證的會話過期時,XHR請求失敗

該網站還採用了一組用戶交互觸發的XHR請求。一個特定的例子是允許用戶模擬其他用戶的下拉菜單。另一個是全站搜索頁面上的構面功能。

問題是,當用戶在頁面上保持非活動狀態一定時間時會話過期。例如,在用戶點擊鏈接時的正常HTTP請求中,這不是問題。會話過期後,用戶會被重定向到STS,並立即返回而無需用戶注意 - 這種情況很快就會發生。

但XHR請求失敗。在控制檯中的實際錯誤消息是:

XMLHttpRequest cannot load https://adfs.contoso.com/adfs/ls/... 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'https://www.example.com' is therefore not allowed access. 

看來,XHR請求無法重定向到STS,然後回到依賴聚會就像一個普通的HTTP請求發生,因爲這會導致CORS問題。

這自然地打破了依賴特定javascript的頁面上的所有元素。用戶解決此問題的唯一方法是在發生問題時刷新頁面。

什麼是解決這個問題的正確方法?

回答

0

將此添加到ADFS ls文件夾中的Web配置中,或者如果您使用的是ADFS代理上的相應ADFS代理。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 
</configuration> 

裁判: http://enable-cors.org/server_iis7.html

+0

雖然它是在微軟的土地有些典型的只是較低的安全屏障當事情不工作,我一個有點懷疑這是否是正確的做法。它肯定會解決這個問題,但它同時也是一個影響整個ADFS代理的全局設置。雖然在這種情況下可能風險相對較低,但我更願意在客戶端工作。 – user5254475 2015-06-12 06:03:51

+0

然後將應用程序和ADFS ls全部移至同一個域。或者特別列出你信任的域名:https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work – MatthewMartin 2015-06-12 14:03:30

0

爲我工作唯一的解決辦法,是通過Pinpont在這個答案中提供的一個:https://stackoverflow.com/a/28631956/6299975

這是我做過什麼來實現滑動過期。

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
    SlidingExpiration = false 
}); 
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions 
    { 
     MetadataAddress = xxxxxxx, 
     Wtrealm = xxxxxx, 
     UseTokenLifetime = false, 
    } 

);

SlidingExpiration在CookieAuthenticationOptions =假

UseTokenLifetime =在WsFederationAuthenticationOptions假

相關問題