AD FS 自動輪轉 Token-Signing 憑證導致靜態 SAML 依賴方信任 SSO 中斷,求 PowerShell 批次更新與憑證匯出方案

Chen Weiming 100 信譽點數
2026-09-08T07:56:57.88+00:00

我們單一登入(SSO)環境最近因 AD FS 的 權杖簽署憑證自動輪轉(Token-Signing Certificate Auto-Rollover) 機制觸發,導致數個關鍵企業應用程式發生驗證失敗與服務中斷。

經排查,原因在於部分較舊的 SAML 依賴方信任(Relying Party Trusts, RPT)並未設定動態輪詢 AD FS 的同盟元資料網址(Federation Metadata URL),而是使用靜態 XML 元資料。當 AD FS 將新產生的 Token-Signing 憑證升格為主要憑證(Primary)後,這些 static RPT 仍嘗試使用舊憑證驗證 SAML Assertion 簽章,進而造成 SSO 授權失敗。

我們需要將目前生效的主要 Token-Signing 公鑰憑證(.cer)匯出,並更新這些 static RPT 設定。

想請教是否有驗證過的 PowerShell 標準作業腳本 可以:

  1. 自動提取並匯出當前 Active 且為 Primary 的 AD FS Token-Signing 公鑰憑證(不含私鑰)。
  2. 直接透過 ActiveDirectoryFederationServices 模組更新本機 static RPT,或產出符合第三方廠商格式的公鑰憑證字串?
Windows for business | Windows 365 商務版
0 則留言 沒有留言

1 個回答

排序依據: 最實用
  1. Domic Vo 33,350 信譽點數 獨立顧問
    2026-09-08T08:28:31.29+00:00

    您好,

    您描述的情境在 AD FS 环境中确实常见:Token-Signing 凭证自动轮转后,若某些 SAML Relying Party Trust 没有设定动态 Federation Metadata URL,而是使用静态 XML,便会因为仍依赖旧凭证而导致验证失败。 解决方式就是导出目前生效的主要 Token-Signing 公钥凭证,并更新这些 static RPT。

    在 PowerShell 中,您可以透过 AD FS 模块来精准取得目前 Active 且 Primary 的 Token-Signing 凭证。 以下是一个标准化的脚本范例:

    PowerShell

    # 匯入 AD FS 模組
    Import-Module ADFS
    
    # 取得目前主要的 Token-Signing 憑證
    $cert = Get-AdfsCertificate -CertificateType Token-Signing | Where-Object { $_.IsPrimary -eq $true -and $_.IsActive -eq $true }
    
    # 將公鑰憑證匯出為 .cer 檔案(不含私鑰)
    Export-Certificate -Cert $cert.Certificate -FilePath "C:\Temp\TokenSigning.cer"
    
    # 驗證輸出
    Write-Output "Exported Primary Token-Signing certificate to C:\Temp\TokenSigning.cer"
    

    这样会产生一个标准的 .cer 文件,您可以提供给第三方厂商更新他们的 static RPT。

    若要直接更新本机的 static RPT,您可以使用 Set-AdfsRelyingPartyTrust 搭配 -SigningCertificateRevocationCheck None-SignatureAlgorithm 等参数来重新指定凭证。 不过在大多数情况下,第三方应用程序需要您提供 .cer 文件,而不是直接在 AD FS 内部更新。

    如果厂商要求以字符串形式提供公钥,您可以将证书转换为 Base64:

    PowerShell

    $bytes = $cert.Certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)
    [System.Convert]::ToBase64String($bytes) | Out-File "C:\Temp\TokenSigning_Base64.txt"
    

    这样就能产生一个符合常见 SAML Metadata 格式的字符串,方便嵌入到他们的配置文件中。

    总结来说,最佳实务是:使用 Get-AdfsCertificate 抓取 Primary + Active 凭证,透过 Export-Certificate 导出 .cer,再依需求提供给 static RPT 或第三方。 这样能确保凭证轮转后,所有依赖方都能正确验证 SAML Assertion。

    多米克配音。

    此回答有幫助嗎?

    0 則留言 沒有留言

您的回答

答案可由問題作者標示為「已接受」,而由仲裁者標示為「推薦」,這可協助使用者知道答案解決了作者的問題。