使用SAML2 LogoutRequest登出时无效的SessionIndex出现问题

时间:2018-02-08 00:22:35

标签: java azure office365 saml saml-2.0

我是开发人员,尝试使用SAML 2将我的IdP与Office 365集成。

我在Logon用户的第一步中取得了成功。但是,我对使用IdP-Initiated流的Sign Out(LogoutRequest)有很多疑问,怀疑与Sign Out的端点有关。为了开发Logon,我遵循了此元数据文件中的端点和配置:

https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml

Ti发送LogoutRequest,元数据提供与登录相同的URL:

<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.microsoftonline.com/login.srf"/>

我按如下方式创建LogoutRequest:

<saml2p:LogoutRequest Destination="https://login.microsoftonline.com/login.srf"
                      ID="_263311dc-ce0a-21c3-90d3-2e1312cde124"
                      IssueInstant="2015-01-13T13:51:57.978Z"
                      Version="2.0"
                      xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">

    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://my-enterprise-configuration-value</saml2:Issuer>
    <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
                  SPNameQualifier="https://my-enterprise-configuration-value"
                  xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">my-configuration-name-id-in-o365</saml2:NameID>
    <samlp:SessionIndex>_session-index-generate-in-saml-response</samlp:SessionIndex>
</saml2p:LogoutRequest>

所以我使用Signature的属性生成相同的LogoutRequest,但是我得到了同样的错误(SessionIndex不存在......)。

我最大的疑问与Destination,NameID Format和SPNameQualifier有关。

目的地的正确值是多少?我在其他地方看到我应该使用https://login.microsoftonline.com/common/saml2插入目的地,我也看到https://login.microsoftonline.com/<tenant-azure-id>/saml2

那么,即使我的目标应用是以上注释之一,我仍然必须将我的POST请求发送到https://login.microsoftonline.com/login.srf吗?或者我应该将POST发送到与目的地相同的本地位置?

NameID格式与上传的SAMLResponse(我发送到Office 365)相同。

SPNameQualifier已使用Issuer(ImmutableID)中设置的相同值。

我在帖子中发送的数据示例:

SAMLRequest=nVLdSsMwFH6Vkvt0TWs3F9bCYAiFKerEC29GSE9roE1qTirz2bzwkXwF025DHajgTchJvvP9nGSBom3ijq9NbXp3C089oAtWflFaOGV0Rh6d65BPJo2plQ5bJa1BUzmjG6UhlKY93KCtSFCsMrKNp0nCWCmphEjQmMmEzqMyoTGwhMWyBBafeShiD4VGJ7TLSByxlEaMsuSOJTxlPJ2F89n5AwnuweJoJA4jEuzaRiPfu85IbzU3AhVyLVpA7iTfLC/X3EN5Z40z0jQkX4xwPgrarwy/EwhEsMMMSP7++nYcg9+2LxS0A9tZhUCl0ZWqezuOiz6LpofF5KviUf/KKxSr4MLYVrifpVnIxhNV0mqEcmiFapZlaQGRBJvrgeimF42qFNjPB/rTFvlXdk/7nWtAU+9OaWqSaXoMu4+XB2Pajm+8WY8udAm7fIv7yvf4ktagwZPBQDGgqU/WGY2HwZ00BweFk1+afwA=
SigAlg=http://www.w3.org/2000/09/xmldsig#rsa-sha1
RelayState=data_sended_for_microsoft_in_login_value
Signature=UrlEncoded(Base64Encoded(SAMLRequest))&UrlEncoded(Base64Encoded(SigAlg))

我也在尝试在管理工具中找到在我的应用程序中配置注销的位置,但还没找到。

1 个答案:

答案 0 :(得分:0)

  1. “目标”属性的正确值始终是您向其发送SAML请求的URL(或者相反,指示用户的浏览器向其发送请求(在这种情况下为POST))。
  2. 使用POST绑定时,不应使用单独的SigAlgSignature属性,而应在SAML2 XML消息本身中将签名作为XML签名包括在内。这两个属性仅在HTTP重定向绑定中使用。