Obtener el token de ADFS en Powershell
adfs install (3)
Este script debe guiarlo en su camino http://gallery.technet.microsoft.com/scriptcenter/Invoke-ADFSSecurityTokenReq-09e9c90c Necesitará .Net Framework 4.5
También puede simular un inicio de sesión de ADFS en Office 365 utilizando el cmdlet Connect-MSOL para conectarse a una sesión de PowerShell. Si utiliza una cuenta de ADFS, se iniciará el inicio de sesión de ADFS.
Tenemos un entorno ADFS 2.0 que se utiliza para federar nuestro dominio de Active Directory con Office 365.
Recientemente tuvimos un problema donde el clúster dejó de responder, lo que a su vez rompió el acceso de correo electrónico / calendario para todos nuestros usuarios. Como actualmente no tenemos ningún monitoreo para ADFS, estoy intentando escribir un script de PowerShell que periódicamente intentará autenticarse en nuestro clúster ADFS y obtener un token válido similar al de SSO en testexchangeconnectivity.com.
Parece que el token es realmente emitido por
/ adfs / services / trust / 2005 / usernamemixed
pero cada vez que trato de ejecutar invoke-webrequest o new-Webservice proxy contra este URI y proporcionar credenciales locales de AD obtengo un error de 400 Bad Request.
¿Qué debo hacer para solicitar correctamente un token desde este punto final?
Básicamente, utiliza WSTrustChannelFactory, crea un canal y lo pasa a RequestSecurityToken.
Leandro tiene una muestra agradable y concisa
Tendrá que instalar Windows Identity Foundation (WIF) si no está utilizando .NET 4.5.
Trabajo en un producto que realiza autenticación federada utilizando WS-Federation y WS-Trust. Creo que su caso es parte de nuestro flujo de trabajo.
A lo largo de los años, he desarrollado la automatización de PowerShell contra nuestra API basada en SOAP, y en algún momento he consolidado ese conocimiento en el módulo WcfPS disponible en la galería.
El código del módulo es de código abierto y, aunque está en script, depende en gran medida de las clases y ensamblados de .NET Framework de los ensamblados System.ServiceModel
y System.IdentityModel
. Menciono esto porque la mayoría de las API dentro de esos ensamblajes no están disponibles en .NET estándar 2, por lo que el módulo desafortunadamente no funcionará en sistemas operativos que no sean Windows. También puede leer más sobre esto en mi post WCFPS - Módulo PowerShell para trabajar con puntos finales SOAP .
Este es un ejemplo donde puede emitir tokens simétricos y portadores dependiendo de los requisitos de su proveedor de servicio y la configuración de la parte dependiente. El código requiere una comprensión básica del flujo de seguridad federada, la configuración y la terminología.
# 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