2012-02-28 51 views
4

我試圖通過基本身份驗證自動將用戶登錄到Xwiki安裝。這是因爲幫助存儲在wiki中,但我們希望檢索過程對用戶是透明的。針對查詢字符串的基本身份驗證的IIS重寫規則

我們推動用戶開了一個URL(通過<a>標籤),如: http://username:[email protected]/xwiki/bin/view/Main?basicauth=1

這工作正常,除了的Internet Explorer(看到每一個瀏覽器:http://support.microsoft.com/kb/834489不幸的是,我們的用戶羣的80%使用互聯網Explorer不能讓他們手動輸入證書

目前,我們已經在Xwiki前面安裝了IIS 7.5,並將所有請求代理到另一臺服務器上的Tomcat實例。問題,我想我可以使用IIS重寫規則來打開這樣的網址:

http://xwiki.example.org/xwiki/bin/view/Main?basicauth=1&_username=username&_password=password

成這樣:

http://username:[email protected]/xwiki/bin/view/Main?basicauth=1&_username=username&_password=password

的想法是,IIS將替代_username/_password查詢字符串參數到URL,並通過其關閉,以Tomcat和XWiki實現會忽略額外的參數。

我創建像一個URL重寫規則:

<rule name="BasicAuthRewrite" enabled="true"> 
    <match url="https?://(.+)&amp;?_username=(.+)&amp;_password=(.+)" /> 
    <action type="Rewrite" url="http://{R:2}:{R:3}@xwiki.example.org/{R:1}" /> 
</rule> 

當我去 '測試模式' 在IIS並提供了自己的網址,所有的反向引用({R:X})匹配的數據I想。但是,當我在瀏覽器中訪問URL時,重寫規則無法調用。

有什麼辦法可以達到我想要的行爲嗎?

回答

6

可以在IIS上使用URL重寫進行基本身份驗證。您應該在base64中添加服務器變量HTTP_Authorization的值Basic,然後添加用戶名:密碼。請記住將變量添加到允許的變量中

因此,對於用戶Aladdin使用密碼打開芝麻,您的格式將爲Aladdin:打開芝麻和base64編碼的QWxhZGRpbjpvcGVuIHNlc2FtZQ ==。

換算成 授權:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==

<rule name="SomeName" stopProcessing="true"> 
    <match url="url/to/match" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
    <action type="Rewrite" url="http://www.redirecturl.com/" appendQueryString="true" /> 
    <serverVariables> 
     <set name="HTTP_Authorization" value="Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" /> 
    </serverVariables> 
</rule> 

IIS Screenshot Authentication

+0

如果取決於連接的用戶,該怎麼辦?我當然不能在配置文件中設置它,因爲它是在執行時計算的。 – 2013-09-24 10:21:59

+0

我認爲這個解決方案可能無法解決您的問題。你可以寫一些具有重寫/類似代理功能的東西,並將其用作「解決方案」。 – Jaco 2013-09-24 14:09:22

+0

「rewrite/proxy-like」是什麼意思?就像創建一個控制器來發送請求並重寫響應一樣? – 2013-10-03 09:41:30

0

這應該這樣做:

<rule name="BasicAuthRewrite" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions trackAllCaptures="true"> 
     <add input="{QUERY_STRING}" pattern="basicauth=1&amp;_username=(.+)&amp;_password=(.+)" /> 
    </conditions> 
    <action type="Rewrite" url="http://{C:1}:{C:2}@xwiki.example.org/{R:1}" appendQueryString="false" /> 
</rule> 
+0

嗯,IIS返回「HTTP錯誤502.3 - 錯誤的網關服務器的名稱或地址無法解析」。我認爲它可能會將用戶名/密碼解釋爲域名的一部分並嘗試連接到它。我相信這是因爲如果我取出用戶名/密碼(「{C:1}:{C:2} @」部分),它會按預期加載登錄頁面。你知道有沒有辦法解決這個問題? – 2012-02-29 01:02:57

+0

對不起,我不熟悉將認證詳細信息作爲域地址的一部分的限制。 – Tomek 2012-02-29 11:18:23

-1

看來這是不可能的IIS。

0

授權不能委託給編曲。因此,如果內容高度敏感且需要授權,建議您不要啓用緩存。 ARR

但是有解決方法。

Solution

+1

如果你能夠在你的文章中包含解決方案的相關部分,那將會好得多;如果鏈接脫機,您的答案仍然有用。 – Paolo 2017-05-29 12:54:34