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

Rya*_*des 5 adfs

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

<samlp:NameIDPolicy AllowCreate="true" 
       Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
Run Code Online (Sandbox Code Playgroud)

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

<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">    
        MyeHAMeGLojBt7fcc2DQtntXXFka0kybkR42ZTitTUs=</NameID>
Run Code Online (Sandbox Code Playgroud)

然而,到目前为止一切顺利,我的服务提供商似乎不理解加密的 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> 
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

    \n\n
    set-ADFSRelyingPartyTrust \xe2\x80\x93TargetName \xe2\x80\x9ctarget\xe2\x80\x9d \xe2\x80\x93EncryptClaims $False\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
\n


Rya*_*des 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>

(我会将这个问题暂时“悬而未决”,以防有人有更好的解决方案。