annotate gwt-client/src/main/java/org/dive4elements/river/client/server/auth/saml/Assertion.java @ 8839:2c8259176c46

Add configurable time tolerance to SAML ticket validation. This allows e.g. to account for time skew between the ISP and the server this servlet is run on.
author Tom Gottfried <tom@intevation.de>
date Wed, 28 Jun 2017 20:09:53 +0200
parents 238fc722f87a
children 0a5239a1e46e
rev   line source
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3 *
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7 */
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
8
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.client.server.auth.saml;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
11 import java.text.ParseException;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12 import java.text.SimpleDateFormat;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 import java.util.Calendar;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14 import java.util.Date;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
15 import java.util.List;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16 import java.util.LinkedList;
5958
a51adfc957bf Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5940
diff changeset
17
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18 import javax.xml.namespace.QName;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19 import javax.xml.xpath.XPathConstants;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
20
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21 import org.apache.log4j.Logger;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
22
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
23 import org.w3c.dom.Element;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
24 import org.w3c.dom.NodeList;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
25
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26 /**
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
27 * Represents a SAML assertion about a user.
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
28 */
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 public class Assertion {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
31 private static Logger log = Logger.getLogger(Assertion.class);
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
33 private Element assertion;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
34 private LinkedList<String> roles;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35 private String user_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
36 private String name_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
37 private String group_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
38 private String group_name;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
39 private Date notbefore;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
40 private Date notonorafter;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
41
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
42 private static final String ATTR_CONT_USER_ID =
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
43 "urn:conterra:names:sdi-suite:policy:attribute:user-id";
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
44 private static final String ATTR_CONT_GROUP_ID =
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
45 "urn:conterra:names:sdi-suite:policy:attribute:group-id";
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
46 private static final String ATTR_CONT_GROUP_NAME =
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
47 "urn:conterra:names:sdi-suite:policy:attribute:group-name";
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
48 private static final String ATTR_CONT_ROLE =
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
49 "urn:conterra:names:sdi-suite:policy:attribute:role";
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
50
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
51 public Assertion(Element assertion) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
52 this.assertion = assertion;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
53 this.roles = new LinkedList<String>();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
54 this.parseCondition();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
55 this.parseAttributeStatement();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
56 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
57
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
58 private void parseCondition() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
59 Element conditions = (Element)XPathUtils.xpathNode(this.assertion,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60 "saml:Conditions");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
61 if (conditions == null) {
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
62 log.error("Cannot find Assertion conditions element");
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
63 return;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
65
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
66 this.notbefore = parseDateAttribute(conditions, "NotBefore");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67 if (this.notbefore == null) {
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
68 log.warn("Could not extract NotBefore date.");
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
69 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
70 this.notonorafter = parseDateAttribute(conditions, "NotOnOrAfter");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
71 if (this.notonorafter == null) {
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
72 log.warn("Could not extract NotOnOrAfter date.");
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
73 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
74 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
75
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
76 private Date parseDateAttribute(Element element, String name) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
77 SimpleDateFormat dateformat = new SimpleDateFormat();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
78 // format should be "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" but that's
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
79 // only available in java 7+. However, parsing without the
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
80 // time-zone yields Date values in the local time-zone,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
81 // therefore we need to convert to GMT ourselves.
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
82 dateformat.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
83
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
84 String value = element.getAttribute(name);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
85 try {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
86 return toGMT(dateformat.parse(value));
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
87 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
88 catch(ParseException e) {
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
89 log.error("Cannot parse Condition attribute "
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
90 + name + " with value " + value
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
91 + " (" + e.getLocalizedMessage() + ")");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
92 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93 return null;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
95
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
96 private Date toGMT(Date date) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
97 Calendar cal = Calendar.getInstance();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
98 cal.setTime(date);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
99 cal.set(Calendar.ZONE_OFFSET, 0);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
100 cal.set(Calendar.DST_OFFSET, 0);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
101 return cal.getTime();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
102 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
103
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
104 private void parseAttributeStatement() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
105 Element attrstatement = (Element)XPathUtils.xpathNode(this.assertion,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
106 "saml:AttributeStatement");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
107 if (attrstatement == null) {
8203
238fc722f87a sed 's/logger/log/g' src/**/*.java
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5958
diff changeset
108 log.error("Cannot find Assertion AttributeStatement element");
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
109 return;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
110 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
111
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
112 this.name_id = XPathUtils.xpathString(attrstatement,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
113 "saml:Subject"
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
114 + "/saml:NameIdentifier");
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
115
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
116 this.user_id = getAttrValue(attrstatement, ATTR_CONT_USER_ID);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
117 this.group_id = getAttrValue(attrstatement, ATTR_CONT_GROUP_ID);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
118 this.group_name = getAttrValue(attrstatement, ATTR_CONT_GROUP_NAME);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
119 this.roles = getAttrValues(attrstatement, ATTR_CONT_ROLE);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
120 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
121
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
122 static Object getAttrObject(Element attrs, String name, QName returnType) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
123 return XPathUtils.xpath(attrs,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
124 "saml:Attribute[@AttributeName='" + name + "']"
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
125 + "/saml:AttributeValue",
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
126 returnType);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
127 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
128
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
129 static String getAttrValue(Element attrs, String name) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
130 return (String)getAttrObject(attrs, name, XPathConstants.STRING);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
131 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
132
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
133 static LinkedList<String> getAttrValues(Element attrs, String name) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
134 LinkedList<String> strings = new LinkedList<String>();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
135 NodeList nodes = (NodeList)getAttrObject(attrs, name,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
136 XPathConstants.NODESET);
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
137 for (int i = 0; i < nodes.getLength(); i++) {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
138 strings.add(nodes.item(i).getTextContent());
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
139 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
140
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
141 return strings;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
142 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
143
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
144 public List<String> getRoles() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
145 return this.roles;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
146 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
147
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
148 public String getUserID() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
149 return this.user_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
150 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
151
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
152 public String getNameID() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
153 return this.name_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
154 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
155
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
156 public String getGroupID() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
157 return this.group_id;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
158 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
159
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
160 public String getGroupName() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
161 return this.group_name;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
162 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
163
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
164 public Date getFrom() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
165 return this.notbefore;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
166 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
167
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
168 public Date getUntil() {
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
169 return this.notonorafter;
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
170 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
171
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
172 /**
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
173 * Returns whether the ticket to which the assertion belongs is
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
174 * valid at the time the method is called. The method returns true,
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
175 * if both dates (notbefore and notonorafter) have been determined
8839
2c8259176c46 Add configurable time tolerance to SAML ticket validation.
Tom Gottfried <tom@intevation.de>
parents: 8203
diff changeset
176 * successfully and the current date/time is between both (with given
2c8259176c46 Add configurable time tolerance to SAML ticket validation.
Tom Gottfried <tom@intevation.de>
parents: 8203
diff changeset
177 * tolerance).
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
178 * @return Whether the ticket is valid now.
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
179 */
8839
2c8259176c46 Add configurable time tolerance to SAML ticket validation.
Tom Gottfried <tom@intevation.de>
parents: 8203
diff changeset
180 public boolean isValidNow(int timeEps) {
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
181 Date now = new Date();
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
182 return (this.notbefore != null && this.notonorafter != null
8839
2c8259176c46 Add configurable time tolerance to SAML ticket validation.
Tom Gottfried <tom@intevation.de>
parents: 8203
diff changeset
183 && now.after(new Date(this.notbefore.getTime() - timeEps))
2c8259176c46 Add configurable time tolerance to SAML ticket validation.
Tom Gottfried <tom@intevation.de>
parents: 8203
diff changeset
184 && now.before(new Date(this.notonorafter.getTime() + timeEps)));
5940
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
185 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
186 }
05da3cfa4054 Add new SAML Assertion class based on WAS Assertion.
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
187 // vim: set fileencoding=utf-8 ts=4 sw=4 et si tw=80:

http://dive4elements.wald.intevation.org