2012-02-28 48 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