Проект, над которым я работаю, представляет собой набор веб-сервисов, которые извлекают данные из локальной базы данных. Клиент хочет ограничить доступ только авторизованным пользователям, проверяя их учетные данные в Azure Active Directory.
Я посмотрел на http://azure.microsoft.com/en-us/documentation/articles/mobile-services-html-get-started-users/ и несколько других статей о том, как лучше поступить с этим, но я не могу найти надежный способ сделать это.
Я пытался использовать cURL со следующим xml —
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue</a:Action>
<a:To s:mustUnderstand="1">https://login.windows.net/[]/saml2</a:To>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
<o:UsernameToken>
<o:Username>USERNAME</o:Username>
<o:Password>PASS</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<a:EndpointReference>
<a:Address>https://login.windows.net/[]/saml2</a:Address>
</a:EndpointReference>
</wsp:AppliesTo>
<trust:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
<trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType>
<trust:TokenType>urn:oasis:names:tc:SAML:2.0:assertion</trust:TokenType>
</trust:RequestSecurityToken>
</s:Body>
</s:Envelope>
и команда cURL
curl https://login.windows.net/[]/saml2 --data @tmp.xml -H "Content-Type:application/soap+xml" -v
Я продолжаю получать «Неправильный запрос saml2». Есть ли способ сделать это через cURL? Как лучше всего выполнить эту аутентификацию, не перенаправляя пользователя на страницу входа?
Для тех, кто имеет эту проблему (и является совершенно новым для SAML2), пожалуйста, проверьте SimpleSamlphp. Через несколько минут мой сервис заработал.
Примечание. Для этого необходимо, чтобы приложение было авторизовано в качестве поставщика услуг в Azure. И если у вас есть какие-либо проблемы с тем, что ваше зарегистрированное приложение не находится в источниках тестовой аутентификации, убедитесь, что имя вашего ключа метаданных указано правильно.
Других решений пока нет …