博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Single Log Out with OpenSAML
阅读量:7153 次
发布时间:2019-06-29

本文共 4270 字,大约阅读时间需要 14 分钟。

To logout an user from the SP an LogoutRequest is sent. The data needed about the user is the SessionIndex and NameID from the data recived at login. I my case in the Assertion in the Artifact Resolve Response.

//IPR Ergogroup ASpublic static void doSynchronousLogout(final HttpSession sessionToLogout, final SAMLMetaData metaData) throws SOAPException, SecurityException, ValidationException, IllegalArgumentException, java.lang.SecurityException, IllegalAccessException, MarshallingException, SignatureException {  NameID nameId = (NameID)sessionToLogout.getAttribute("SAMLNameID");  String sessionIndex = (String)sessionToLogout.getAttribute("SAMLSessionIndex");     Body body = buildSAMLObjectWithDefaultName(Body.class);   LogoutRequest logoutRequest = genererateLogoutRequest(nameId, sessionIndex, metaData);   signLogoutRequest(logoutRequest);   body.getUnknownXMLObjects().add(logoutRequest);   nameId.detach();   Envelope envelope = buildSAMLObjectWithDefaultName(Envelope.class);   envelope.setBody(body);   SAMLUtil.logSAMLObject(envelope);   BasicSOAPMessageContext soapContext = new BasicSOAPMessageContext();   soapContext.setOutboundMessage(envelope);   HttpClientBuilder clientBuilder = new HttpClientBuilder();   HttpSOAPClient soapClient = new HttpSOAPClient(clientBuilder.buildClient(), new BasicParserPool());    String sloServiceURL = null;    for (SingleLogoutService sls : metaData.getIdpEntityDescriptor().getIDPSSODescriptor(SAMLConstants.SAML20P_NS).getSingleLogoutServices()) {     if (sls.getBinding().equals(SAMLConstants.SAML2_SOAP11_BINDING_URI)) {      sloServiceURL = sls.getLocation();     }    }    soapClient.send(sloServiceURL, soapContext);    Envelope soapResponse = (Envelope)soapContext.getInboundMessage();    SAMLUtil.logSAMLObject(soapResponse);    validateSLOResponse(soapResponse, logoutRequest.getID());    verifySLOResponseSignature(soapResponse);    processSLOResponse(soapResponse);   }  private static LogoutRequest genererateLogoutRequest(final NameID nameId, final String sessionIndex, final SAMLMetaData metaData) throws IllegalArgumentException, java.lang.SecurityException, IllegalAccessException {  LogoutRequest logoutRequest = buildSAMLObjectWithDefaultName(LogoutRequest.class);  logoutRequest.setID(SAMLUtil.getSecureRandomIdentifier());  for (SingleLogoutService sls : metaData.getIdpEntityDescriptor().getIDPSSODescriptor(SAMLConstants.SAML20P_NS).getSingleLogoutServices()) {   if (sls.getBinding().equals(SAMLConstants.SAML2_SOAP11_BINDING_URI)) {    logoutRequest.setDestination(sls.getLocation());   }  }  logoutRequest.setIssueInstant(new DateTime());  Issuer issuer = buildSAMLObjectWithDefaultName(Issuer.class);  issuer.setValue(EvoteProperties.getProperty("SPEntityId"));  logoutRequest.setIssuer(issuer);  SessionIndex sessionIndexElement = buildSAMLObjectWithDefaultName(SessionIndex.class);  sessionIndexElement.setSessionIndex(sessionIndex);  logoutRequest.getSessionIndexes().add(sessionIndexElement);  logoutRequest.setNameID(nameId);  return logoutRequest; }

LogoutRequest sent:

my-aliasSn7qX8Yf4Pcs6SLl4Yn0NyEx6P0=cE3wgjeM+45uk/XVNQl+1NZKeRwRzFnJN9xaL/36vnXqu6eLBqs8eqdQ2a+yY9UkZz0gU1NrTqUMQgIANw1WfkL2a+sxQqqu2p4ggXKNwHiMWbyfPEUkxQM4wSwr3ECObjyVqrgPDA+4TiDyqPj2NBtZGo8WU3fvpOGQkQN19f0=MIIBrzCCARigAwIBAgIETTWluTANBgkqhkiG9w0BAQUFADAcMRowGAYDVQQDExFzdGVyYXMuZXZhbGcuZXJnbzAeFw0xMTAxMTgxNDM3NDVaFw0yMTAxMTUxNDM3NDVaMBwxGjAYBgNVBAMTEXN0ZXJhcy5ldmFsZy5lcmdvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy96UiOiuQcDQMVNorHKWCu8lAqHCpdgL8SEKsBven1e9Bek5VSspQdyh8Q/t8hmISZq0oEEvtcbZivV1hGQKQIWjTU/utSxGlZDbPNweuxNH6JHiNzDSzbNiMkdBJcy/Szfdx8HGpbnpXrpU+ICNnQl5Ee2V48hlkcH7jwlCMzwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABxQKfXHtomdAlXd+umpCyUUOgcs5shu4HHXr9m48H+YPCXskLwqzDe49WWaX9h7cLClVsHviAccno52Pj7mQfjKgvg1J3JHhTLINTrbgZ1e7mNtiJ9Lez2awbItv7RKU+R2AyiU6wHsjPGN+CQuiT9lZNWQMOih1R+yHT04kkl8puEYi51x6aylfgXbBJTLSTTxOqcks2ce6f528812bbf545358af381cc864c575e9cb901

This is the resulting LogoutResponse in my case:

idp-aliasCDFFLlD2FX8fjlPJLKpJZRusnx0=cKgVEfLR48x7urpH+TV+V1gHYnVhc/ErkMhwp17rjAMfjHKHk0EPgH2+aOV7Z83udbfr0RPKF5ZdMg0zq1KIm29RsqUsUYNKKNiYPlEkBIoHPcc2AhftpA/VNRjea7q2W9+y6XV2YWjzGnArrfflv1KM1t5C89Vz/VB0jQdJvMU=Request is done successfully

转载于:https://www.cnblogs.com/xzs603/archive/2013/01/07/2849754.html

你可能感兴趣的文章
高可用集群原理
查看>>
网络安全系列之三十三 关闭端口
查看>>
学习C#感受
查看>>
php线程实现
查看>>
linux查看命令来自哪个安装包
查看>>
堡垒机-麒麟开源堡垒机代码分析-应用发布帐号同步部分
查看>>
Ceph集群搭建
查看>>
Linux环境下使用rpm包方式安装MySQL的方法
查看>>
HTTP协议
查看>>
Java电商项目面试题(六)
查看>>
全网备份
查看>>
Java 重大升级马上来了:JDK 11 新特性了解一下
查看>>
字符串转换成NSDate类型的 为nil解决方法
查看>>
Ubuntu git 与 gitlab 关联
查看>>
C++ 上溢和下溢(overflow underflow)
查看>>
Maven_运行时环境
查看>>
动态规划——Best Time to Buy and Sell Stock III
查看>>
grid布局
查看>>
常用的mysql操作
查看>>
转: spring静态注入
查看>>