Прошло много времени, но на днях я наткнулся на точное решение своей проблемы - Поставщик услуг 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 пользователя.