我的服务提供商发出带有 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
我解决这个问题的方法是这样的:
- 创建从 AD 中提取 UPN 的规则
- 创建一个转换规则,将传入声明类型转换
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"/>。我想知道这是否会影响证明。