Java 来自ADFS的SAMLR响应中的UserPrincipalName(UPN)

Java 来自ADFS的SAMLR响应中的UserPrincipalName(UPN),java,active-directory,saml-2.0,adfs,adfs2.0,Java,Active Directory,Saml 2.0,Adfs,Adfs2.0,我正在使用ADFS实现SP启动的SSO。我向ADFS提交SAMLRequest,在验证SAMLRequest之后,ADFS用SAMLResponse响应。 在ADFS中,索赔规则将UPN映射到名称ID。但我无法在SAMLResponse中看到名称ID或UPN。这是我必须在SAMLRequest中告诉ADFS的事情,还是ADFS的一些配置问题 这是我的同样要求: <?xml version="1.0" encoding="UTF-8"?> <samlp:AuthnRequest

我正在使用ADFS实现SP启动的SSO。我向ADFS提交SAMLRequest,在验证SAMLRequest之后,ADFS用SAMLResponse响应。 在ADFS中,索赔规则将UPN映射到名称ID。但我无法在SAMLResponse中看到名称ID或UPN。这是我必须在SAMLRequest中告诉ADFS的事情,还是ADFS的一些配置问题

这是我的同样要求:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    AssertionConsumerServiceURL="https://http://testurl.com/mysite/samlrequest"
    ForceAuthn="false" ID="_bec424fa5103428909a30ff1e31168327f79474984"
    IsPassive="false" IssueInstant="2015-04-22T11:49:03.815Z"
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
    Version="2.0">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://testurl.com/mysite</saml:Issuer>
    <samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />
    <samlp:RequestedAuthnContext Comparison="exact">
        <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
    </samlp:RequestedAuthnContext>
</samlp:AuthnRequest>

我不知道您的索赔规则是什么样子的,但我将电子邮件地址属性映射到nameidentifier,它就可以工作了。这应该是ADFS中的自定义规则,应该如下所示:

c:[类型==] =>issueType=,Issuer=c.Issuer,OriginalIssuer=c.OriginalIssuer,Value=c.Value,ValueType=c.ValueType,属性[]=urn:oasis:names:tc:SAML:2.0:nameid格式:瞬态,属性[]=SP\U实体\U ID;

如果要将此作为属性发送,只需使用“将LDAP属性作为声明发送”创建规则


我知道已经晚了,但希望这能帮助到别人。

它是否出现在断言的部分而不是部分?您是否使用了转换规则?@explunite我收到的SAMLResponse根本不包含或元素。我是否需要在SAMLRequest中提及获取UPN或名称ID作为响应,如果是,那怎么办呢?我现在还添加了问题中的SAMLRequest。