Получить токен 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.
Что мне нужно сделать, чтобы правильно запросить токен из этой конечной точки?
Ответы
Ответ 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