STSClient requires Lifetime element in RSTR
-------------------------------------------
Key: CXF-2524
URL: https://issues.apache.org/jira/browse/CXF-2524
Project: CXF
Issue Type: Bug
Affects Versions: 2.2.4
Reporter: Oliver Wulff
The STSClient in CXF requires that an STS returns the Lifetime element which is
optional as per WS-Trust 1.3 spec:
[http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3-os.html]
>>>
4.4 Returning a Security Token
...
wst:RequestSecurityTokenResponse/wst:Lifetime
This optional element specifies the lifetime of the issued security token. If
omitted the lifetime is unspecified (not necessarily unlimited). It is
RECOMMENDED that if a lifetime exists for a token that this element be included
in the response.
>>>
STSClient.java:
...
while (el != null) {
String ln = el.getLocalName();
if (namespace.equals(el.getNamespaceURI())) {
if ("Lifetime".equals(ln)) {
lte = el;
...
SecurityToken token = new SecurityToken(id, rstDec, lte);
...
SecurityToken.java:
...
public SecurityToken(String id,
Element tokenElem,
Element lifetimeElem) {
this.id = id;
this.token = cloneElement(tokenElem);
this.processLifeTime(lifetimeElem);
...
/**
* @param lifetimeElem
* @throws TrustException
*/
private void processLifeTime(Element lifetimeElem) {
try {
DatatypeFactory factory = DatatypeFactory.newInstance();
Element createdElem =
DOMUtils.getFirstChildWithName(lifetimeElem,
WSConstants.WSU_NS,
WSConstants.CREATED_LN);
this.created =
factory.newXMLGregorianCalendar(DOMUtils.getContent(createdElem))
.toGregorianCalendar();
Element expiresElem =
DOMUtils.getFirstChildWithName(lifetimeElem,
WSConstants.WSU_NS,
WSConstants.EXPIRES_LN);
this.expires =
factory.newXMLGregorianCalendar(DOMUtils.getContent(expiresElem))
.toGregorianCalendar();
} catch (DatatypeConfigurationException e) {
//shouldn't happen
If "null" is passed to processLifeTime a NPE occurs. If the CXF internals don't
depend on the lifetime the following might fix it already:
...
public SecurityToken(String id,
Element tokenElem,
Element lifetimeElem) {
this.id = id;
this.token = cloneElement(tokenElem);
if (lifetimeElem !=null) this.processLifeTime(lifetimeElem);
...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.