Как защитить и аутентифицировать всю веб-папку с помощью Azure и IIS - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь выяснить, есть ли другие или лучшие способы аутентификации в Microsoft Azure, чем мое текущее решение.

У меня есть приложение PHP, которое настроено в Windows Server 2019 и IIS. Я использую библиотеку SimpleSAML php, которая работает нормально - она ​​без проблем проходит аутентификацию в Azure.

Но ... она аутентифицируется в file-by -file base означает, что мне нужно включить аутентификацию Azure в каждый файл PHP, где я хочу, чтобы он аутентифицировался. Что-то вроде этого работает нормально:

https://whatever.local/secure/myfile.php:

# ----------
# myfile.php
# ----------

# Include the SimpleSAMLphp library
require($_SERVER["DOCUMENT_ROOT"]."/../simpleSAMLphp/lib/_autoload.php");

# Make sure I am authenticated in Azure
$azure = new \SimpleSAML\Auth\Simple("my-identity");
$azure->requireAuth();

# Get Azure data
$azureUserAttr = $azure->getAttributes();

# Get the data in to useable variables
$azureId = $azureUserAttr["userid"][0] ?? "";
$azureEmail = $azureUserAttr["email"][0] ?? "";

# Print the variables
echo "ID=$azureId<br />";
echo "Email=$azureEmail<br />";

Можно ли вместо этого установить какую-то Windows среду выполнения IIS, которая защитит вся папка , поэтому каждый раз, когда я вызываю что-то, например, /secure/, она аутентифицируется с помощью Azure?

Например - как убедиться, что я должен быть аутентифицирован в Azure прежде чем я смогу получить эту воображаемую картинку, https://whatever.local/secure/picture.jpg? Могу ли я защитить всю папку /secure/?

В идеале он мог бы это сделать, и тогда я должен иметь атрибуты / утверждения Azure, доступные как переменные сервера в PHP?

1 Ответ

0 голосов
/ 05 августа 2020

Прошло много времени, но на днях я наткнулся на точное решение своей проблемы - Поставщик услуг Shibboleth . Это будет делать именно то, что я хотел - защитить мой веб-сервер IIS на уровне папки и аутентифицировать его через Azure, если требуется - И он предоставит данные в переменных на стороне веб-сервера.

Shibboleth SP является родным Установлено приложение Windows, которое предоставляет услугу Windows и интегрируется в IIS как модуль. Обязательно включите «Настроить модуль IIS» в установке. Его даже довольно легко настроить. Конечно, это для всех разное, но в моем случае мне просто нужно было изменить несколько параметров в двух файлах:

shibboleth2. xml

<InProcess>
    <ISAPI normalizeRequest="true" safeHeaderNames="true">
        <Site id="YOUR.IIS.SITE.ID" name="YOUR.WEB.FQDN"/>
    </ISAPI>
</InProcess>

<!-- Below I make sure the /secure folder is proper secured with Azure -->
<!-- More folders could be added if required -->
<RequestMapper type="Native">
    <RequestMap>
    <Host name="YOUR.WEB.FQDN">
        <Path name="secure" authType="shibboleth" requireSession="true"/>
    </Host>
    </RequestMap>
</RequestMapper>

<ApplicationDefaults entityID="YOUR.AZURE.ENTITYID"

<SSO entityID="https://sts.windows.net/YOUR.IDENTITY.PROVIDER/">
    SAML2
</SSO>

<!-- Your XML federation data - here I have it as a local file -->
<MetadataProvider type="XML" validate="true" path="metadata.xml"/>

attribute-map. xml

<Attribute name="YOUR.AZURE.ATTRIBUTE.NAME" id="YOUR.SERVER:VARIABLE.NAME"/>

Вы также должны настроить URL-адрес ответа в Azure, который по умолчанию будет https://YOUR.WEB.FQDN/Shibboleth.sso/SAML2/POST

При настройке (и после каждого изменения конфигурации) вам необходимо перезапустить службу IIS и Shibboleth, Shibboleth Daemon (Default).

После настройки Shibboleth вы можете проверить https://YOUR.WEB.FQDN/Shibboleth.sso/Status и посмотрите, дает ли он результат XML (он должен). Однако вам следует изменить IP-адрес в shibboleth2.xml на локальный компьютер, с которого вы выполняете веб-запрос:

<Handler type="Status" Location="/Status" acl="YOUR.COMPUTER.IP ::1"/>

URL-адрес выхода будет https://YOUR.WEB.FQDN/Shibboleth.sso/Logout

После этого вы внезапно получаете все переменные Azure как переменные на стороне веб-сервера. Например, я установил атрибут в Azure с именем CompanyName, и мне просто нужно отобразить его в attribute-map.xml:

<Attribute name="MyCompany" id="MyNewCompany"/>

Затем из PHP я могу получить эту серверную переменную, $_SERVER["MyNewCompany"] с содержимым авторизованного Azure пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...