Правило перезаписи IIS для базовой аутентификации на строке запроса - PullRequest
5 голосов
/ 29 февраля 2012

Я пытаюсь автоматически войти в систему для установки Xwiki через базовую аутентификацию. Это потому, что помощь хранится в вики, но мы хотим, чтобы процесс поиска был прозрачным для пользователя.

Мы выдвигаем пользователя на URL (через тег <a>), например: http://username:password@xwiki.example.org/xwiki/bin/view/Main?basicauth=1

Это прекрасно работает во всех браузерах, кроме Internet Explorer (см .: http://support.microsoft.com/kb/834489. К сожалению, 80% нашей пользовательской базы используют Internet Explorer, и нельзя вводить учетные данные вручную.

В настоящее время IIS 7.5 находится перед Xwiki и передает все запросы экземпляру Tomcat на другом сервере. Это отлично работает. Чтобы решить мою проблему, я подумал, что мог бы использовать правило перезаписи IIS для преобразования URL-адреса следующим образом:

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

в это:

http://username:password@xwiki.example.org/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 и предоставляю свой URL, все обратные ссылки ({R: x}) соответствуют данным, которые я хочу. Однако, когда я захожу по URL в моем браузере, правило перезаписи не запускается.

Можно ли как-нибудь достичь желаемого поведения?

Ответы [ 4 ]

10 голосов
/ 15 июня 2012

Можно выполнить обычную аутентификацию с перезаписью URL на IIS. Вы должны добавить серверную переменную HTTP_Authorization к значению Basic, за которым следует имя пользователя: пароль в base64. Не забудьте добавить переменную в разрешенные переменные

Таким образом, для пользователя Aladdin с паролем open sesame у вас будет формат 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 голосов
/ 29 мая 2017

Авторизация не может быть делегирована ARR.Поэтому, если содержимое очень чувствительно по своей природе и требует авторизации, рекомендуется не включать кеш. ARR

Но есть обходной путь решения.

Решение

0 голосов
/ 06 марта 2012

Похоже, это невозможно в IIS.

0 голосов
/ 29 февраля 2012

Это должно сделать:

<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>
...