Получить токен ADFS в Powershell

У нас есть среда ADFS 2.0, которая используется для объединения нашего домена Active Directory с Office 365.

Недавно у нас возникла проблема, из-за которой кластер перестал отвечать, что, в свою очередь, прервало доступ к электронной почте/календарю для всех наших пользователей. Поскольку в настоящее время у нас нет мониторинга для ADFS, я пытаюсь написать сценарий PowerShell, который будет периодически пытаться аутентифицироваться в нашем кластере ADFS и получать действительный токен, аналогичный тесту SSO на testexchangeconnectivity.com.

Похоже, что токен фактически выпущен

/adfs/services/trust/2005/usernamemixed

но всякий раз, когда я пытаюсь запустить invoke-webrequest или new-Webservice proxy для этого URI и предоставлять локальные учетные данные AD, я получаю ошибку 400 Bad Request.

Что мне нужно сделать, чтобы правильно запросить токен с этой конечной точки?


person Justin    schedule 22.11.2012    source источник


Ответы (3)


Этот сценарий поможет вам в работе http://gallery.technet.microsoft.com/scriptcenter/Invoke-ADFSSecurityTokenReq-09e9c90c Вам понадобится .Net Framework 4.5

Вы также можете имитировать вход ADFS в Office 365 с помощью командлета Connect-MSOL для подключения к сеансу powershell — если вы используете учетную запись ADFS, произойдет вход в ADFS.

person Neossian    schedule 01.04.2013

Я работаю над продуктом, который выполняет федеративную аутентификацию с использованием WS-Federation и WS-Trust. Я считаю, что ваше дело является частью нашего рабочего процесса.

В течение многих лет я разрабатывал автоматизацию PowerShell для нашего API на основе SOAP и в какой-то момент объединил эти знания в Модуль WcfPS доступен в галерее.

код для модуля является открытым исходным кодом, и хотя он в сценарии, он сильно зависит от классов .net framework и сборки из сборок System.ServiceModel и System.IdentityModel. Я упоминаю об этом, потому что большинство API-интерфейсов внутри этих сборок недоступны из стандарта .NET 2, поэтому модуль, к сожалению, не будет работать в операционных системах, отличных от Windows. Вы также можете узнать больше об этом в моем сообщении WCFPS - Модуль PowerShell для работы с конечными точками SOAP.

Это пример, когда вы можете выпускать симметричные токены и токены на предъявителя в зависимости от требований вашего поставщика услуг и конфигурации проверяющей стороны. Код требует базового понимания потока федеративной безопасности, настройки и терминологии.

# Define the ADFS MEX uri 
$adfsMexUri="https://adfs.example.com/adfs/services/trust/mex"

#region Define authentication endpoints. One for windows and one with username/password
$windowsMixed13AuthenticationEndpoint="https://adfs.example.com/adfs/services/trust/13/windowsmixed"
$usernamePasswordMixed13AuthenticationEndpoint="https://adfs.example.com/adfs/services/trust/13/usernamemixed"
#endregion

#region Define service providers for which we want to issue a symmetric and a bearer token respectively
# Symmatric is for SOAP, WS-Trust
# Bearer is for Web, WS-Federation
$soapServiceProviderAppliesTo="https://myserviceprovider/Soap/"
$webServiceProviderAppliesTo="https://myserviceprovider/Web/"
#endregion

# Parse the MEX and locate the service endpoint
$issuerImporter=New-WcfWsdlImporter -Endpoint $adfsMexUri

#region Issue tokens with windows authentications
$issuerEndpoint=$issuerImporter | New-WcfServiceEndpoint -Endpoint $windowsMixed13AuthenticationEndpoint
$soapToken=New-SecurityToken -Endpoint $issuerEndpoint -AppliesTo $soapServiceProviderAppliesTo -Symmetric
$webToken=New-SecurityToken -Endpoint $issuerEndpoint -AppliesTo $webServiceProviderAppliesTo -Bearer  
#endregion

#region Issue tokens with username/password credentials
$credential=Get-Credential
$issuerEndpoint=$issuerImporter | New-WcfServiceEndpoint -Endpoint $usernamePasswordMixed13AuthenticationEndpoint
$soapToken=New-SecurityToken -Endpoint $issuerEndpoint -Credential $credential -AppliesTo $soapServiceProviderAppliesTo -Symmetric
$webToken=New-SecurityToken -Endpoint $issuerEndpoint -Credential $credential -AppliesTo $webServiceProviderAppliesTo -Bearer    
#endregion
person Alex Sarafian    schedule 03.10.2017

По сути, вы используете WSTrustChannelFactory, создаете канал и передаете ему RequestSecurityToken.

У Леандро есть хороший, лаконичный пример

Вам потребуется установить Windows Identity Foundation (WIF), если вы не используете .NET 4.5.

person John Gasper    schedule 14.08.2013