我正在开发一个使用 WS-Federation 和 WS-Trust 进行联合身份验证的产品。我相信您的案例是我们工作流程的一部分。
多年来,我针对我们基于 SOAP 的 API 开发了 PowerShell 自动化,并且在某个时候,我将这些知识整合到图库中提供的WcfPS模块中。
该模块的代码是开源的,尽管它在脚本中,但它在很大程度上依赖于 .net 框架类和来自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