在 ADFS 2.0 中发送未加密的 NameID 声明

在 ADFS 2.0 中发送未加密的 NameID 声明

我的服务提供商发出带有 NameIDPolicy 标签的 SAML 2.0 AuthRequest,如下所示:

<samlp:NameIDPolicy AllowCreate="true" 
       Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>

这会导致 ADFS 2.0 正确发出 SAML 响应,其中包含由类似于找到的规则创建的加密 NameID 令牌这里

<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">    
        MyeHAMeGLojBt7fcc2DQtntXXFka0kybkR42ZTitTUs=</NameID>

到目前为止一切顺利,但是,我的服务提供商似乎不理解加密的 NameID 声明,并期望它未加密,同时具有以下名称格式:transient

按照这个文件,ADFS2.0 将对临时或持久 NameID 格式的请求视为隐私场景(因此也进行加密)

所以我的问题是:有没有办法让 ADFS 2.0 生成 Format=transient 和未加密的 NameID 的 NameID 声明,如下所示:

<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">Joe</NameID> 

答案1

我们有一位客户在连接我们的 Web 应用程序时遇到问题。我们希望禁用加密以帮助调试我们收到的内容。以下是他们在 ADFS 2.0 服务器上禁用加密的步骤:

  • 单击“开始”
  • 单击“管理工具”
  • 单击“Windows PowerShell 模块”
  • 然后,在 Windows PowerShell 命令提示符下键入以下内容:

    set-ADFSRelyingPartyTrust –TargetName “target” –EncryptClaims $False
    

答案2

我解决这个问题的方法是这样的:

  1. 创建从 AD 中提取 UPN 的规则
  2. 创建一个转换规则,将传入声明类型转换UPN为传出声明类型,然后从“传出名称 ID 格式”下拉列表中Name ID选择nameid 格式transient

这会导致 AD 以所需的格式发送 NameID:
<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">Joe</NameID>

(我会暂时不回答这个问题,以防有人有更好的解决方案。

答案3

1度get-ADFSRelyingPartyTrust –TargetName “目标”-EncryptedNameIdRequired (这将告诉您 ADFS 是否加密 nameID 声明)

如果 EncryptedNameIdRequired = false,则尝试:

设置 ADFSRelyingPartyTrust –TargetName “目标”-EncryptedNameIdRequired $true (这将使值 EncryptedNameIdRequired= true)

我尝试过在我的实验室中切换值,但没有任何影响。在我的例子中,formato 不是 Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>。我想知道这是否会影响证明。

相关内容