1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.ws.security.saml;
21
22 import org.apache.ws.security.WSSecurityException;
23 import org.apache.ws.security.components.crypto.Crypto;
24 import org.apache.ws.security.components.crypto.CryptoFactory;
25
26 import org.apache.ws.security.saml.ext.AssertionWrapper;
27 import org.apache.ws.security.saml.ext.SAMLParms;
28 import org.apache.ws.security.util.Loader;
29
30 import java.util.Properties;
31
32 import javax.security.auth.callback.CallbackHandler;
33
34
35
36
37
38 public class SAMLIssuerImpl implements SAMLIssuer {
39
40 private static final org.apache.commons.logging.Log LOG =
41 org.apache.commons.logging.LogFactory.getLog(SAMLIssuerImpl.class);
42
43 private Properties properties = null;
44
45 private CallbackHandler callbackHandler = null;
46
47 private String issuer;
48 private Crypto issuerCrypto = null;
49 private String issuerKeyPassword = null;
50 private String issuerKeyName = null;
51
52
53
54
55
56
57
58 private boolean sendKeyValue = false;
59
60
61
62
63 private boolean signAssertion = false;
64
65
66
67
68 public SAMLIssuerImpl() {
69 }
70
71 public SAMLIssuerImpl(Properties prop) throws WSSecurityException {
72
73
74
75
76
77 if (prop == null) {
78 return;
79 }
80 properties = prop;
81
82 String cryptoProp =
83 properties.getProperty("org.apache.ws.security.saml.issuer.cryptoProp.file");
84 if (cryptoProp != null) {
85 issuerCrypto = CryptoFactory.getInstance(cryptoProp);
86 issuerKeyName =
87 properties.getProperty("org.apache.ws.security.saml.issuer.key.name");
88 issuerKeyPassword =
89 properties.getProperty("org.apache.ws.security.saml.issuer.key.password");
90 }
91
92 String sendKeyValueProp =
93 properties.getProperty("org.apache.ws.security.saml.issuer.sendKeyValue");
94 if (sendKeyValueProp != null) {
95 sendKeyValue = Boolean.valueOf(sendKeyValueProp).booleanValue();
96 }
97
98 String signAssertionProp =
99 properties.getProperty("org.apache.ws.security.saml.issuer.signAssertion");
100 if (signAssertionProp != null) {
101 signAssertion = Boolean.valueOf(signAssertionProp).booleanValue();
102 }
103
104 String issuerProp = properties.getProperty("org.apache.ws.security.saml.issuer");
105 if (issuerProp != null) {
106 issuer = issuerProp;
107 }
108 }
109
110
111
112
113
114
115 public AssertionWrapper newAssertion() throws WSSecurityException {
116 if (LOG.isDebugEnabled()) {
117 LOG.debug(
118 "Entering AssertionWrapper.newAssertion() ... creating SAML token"
119 );
120 }
121
122 if (callbackHandler == null && properties != null) {
123 try {
124 String samlCallbackClassname =
125 properties.getProperty("org.apache.ws.security.saml.callback");
126 Class<? extends CallbackHandler> callbackClass = null;
127 try {
128 callbackClass = Loader.loadClass(samlCallbackClassname, CallbackHandler.class);
129 } catch (ClassNotFoundException ex) {
130 throw new WSSecurityException(ex.getMessage(), ex);
131 }
132 callbackHandler = callbackClass.newInstance();
133 } catch (InstantiationException ex) {
134 throw new WSSecurityException(ex.getMessage(), ex);
135 } catch (IllegalAccessException ex) {
136 throw new WSSecurityException(ex.getMessage(), ex);
137 }
138 }
139
140
141 SAMLParms samlParms = new SAMLParms();
142 samlParms.setIssuer(issuer);
143 samlParms.setCallbackHandler(callbackHandler);
144
145 AssertionWrapper sa = new AssertionWrapper(samlParms);
146 if (signAssertion) {
147 sa.signAssertion(issuerKeyName, issuerKeyPassword, issuerCrypto, sendKeyValue);
148 }
149
150 return sa;
151 }
152
153
154
155
156
157 public void setSendKeyValue(boolean sendKeyValue) {
158 this.sendKeyValue = sendKeyValue;
159 }
160
161
162
163
164
165 public boolean isSendKeyValue() {
166 return sendKeyValue;
167 }
168
169
170
171
172
173 public void setSignAssertion(boolean signAssertion) {
174 this.signAssertion = signAssertion;
175 }
176
177
178
179
180
181 public boolean isSignAssertion() {
182 return signAssertion;
183 }
184
185
186
187
188
189 public void setCallbackHandler(CallbackHandler callbackHandler) {
190 this.callbackHandler = callbackHandler;
191 }
192
193
194
195
196
197 public CallbackHandler getCallbackHandler() {
198 return callbackHandler;
199 }
200
201
202
203
204
205 public void setIssuerCrypto(Crypto issuerCrypto) {
206 this.issuerCrypto = issuerCrypto;
207 }
208
209
210
211
212 public Crypto getIssuerCrypto() {
213 return issuerCrypto;
214 }
215
216
217
218
219
220 public void setIssuerName(String issuer) {
221 this.issuer = issuer;
222 }
223
224
225
226
227
228 public String getIssuerName() {
229 return issuer;
230 }
231
232
233
234
235
236 public void setIssuerKeyName(String issuerKeyName) {
237 this.issuerKeyName = issuerKeyName;
238 }
239
240
241
242
243 public String getIssuerKeyName() {
244 return issuerKeyName;
245 }
246
247
248
249
250
251 public void setIssuerKeyPassword(String issuerKeyPassword) {
252 this.issuerKeyPassword = issuerKeyPassword;
253 }
254
255
256
257
258 public String getIssuerKeyPassword() {
259 return issuerKeyPassword;
260 }
261
262 }