我正在尝试通过LogoutRequest类使用opensaml库创建单个注销请求。没有方法可以在请求对象中设置会话索引。如何构建注销请求? 我用来构造请求对象的代码片段如下:
SAMLObjectBuilder<LogoutRequest> builder = (SAMLObjectBuilder<LogoutRequest>) builderFactory.getBuilder(LogoutRequest.DEFAULT_ELEMENT_NAME);
LogoutRequest request = builder.buildObject();
request.setID(generateID());
request.setVersion(SAMLVersion.VERSION_20);
request.setIssueInstant(new DateTime());
request.setDestination(bindingService.getLocation());
SAMLObjectBuilder<Issuer> issuerBuilder = (SAMLObjectBuilder<Issuer>) builderFactory.getBuilder(Issuer.DEFAULT_ELEMENT_NAME);
Issuer issuer = issuerBuilder.buildObject();
issuer.setValue(metadata.getHostedSPName());
request.setIssuer(issuer);
SAMLObjectBuilder<NameID> namdIDBuilder = (SAMLObjectBuilder<NameID>) builderFactory.getBuilder(NameID.DEFAULT_ELEMENT_NAME);
NameID nameid = namdIDBuilder.buildObject();
nameid.setFormat("urn:oasis:names:tc:SAML:2.0:nameid-format:transient");
request.setNameID(nameid);
SAMLObjectBuilder<SessionIndex> sessionIndexBuilder = (SAMLObjectBuilder<SessionIndex>) builderFactory.getBuilder(SessionIndex.DEFAULT_ELEMENT_NAME);
SessionIndex sessionindex = sessionIndexBuilder.buildObject();
sessionindex.setSessionIndex(sessionIndex);
正如你在上面看到的,在构建 SessionIndex 之后,没有在 LogoutRequest 对象中设置它的选项。
有人可以给我看一些例子或链接来正确吗?
我设法通过以下方式做到了:
SessionIndex sessionIndex_ = (SessionIndex) Configuration.getBuilderFactory()
.getBuilder(SessionIndex.DEFAULT_ELEMENT_NAME)
.buildObject(SessionIndex.DEFAULT_ELEMENT_NAME);
sessionIndex_.setSessionIndex("test");
request.getSessionIndexes()
.add(sessionIndex_);
我在OpenSAML 4.x中做到了。
SessionIndex sessionIndexElement = OpenSAMLUtils.buildSAMLObject(SessionIndex.class);
sessionIndexElement.setValue(samlSessionIndex);
logoutRequest.getSessionIndexes().add(sessionIndexElement);
已经4年了,但我希望它能得到解决。