Получить токен ADFS в Powershell - программирование
Подтвердить что ты не робот

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

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

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

Похоже, что токен фактически выдается

/ADFS/услуги/доверие/2005/usernamemixed

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Leandro имеет приятный, лаконичный образец

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

Ответ 3

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

На протяжении многих лет я разработал автоматизацию PowerShell против нашего API на основе SOAP, и в какой-то момент я консолидирую эти знания в WcfPS доступен в галерее.

code для модуля является открытым исходным кодом, и хотя его значение в script сильно зависит от классов и сборок инфраструктуры .net от System.ServiceModel и System.IdentityModel. Я упоминаю об этом, потому что большая часть apis внутри этих сборок недоступна из .NET standard 2, поэтому модуль, к сожалению, не будет работать без оконных операционных систем. Вы также можете прочитать об этом в своем сообщении 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