1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.wss4j.dom.common;
21
22 import org.apache.wss4j.common.crypto.Crypto;
23 import org.apache.wss4j.common.crypto.CryptoFactory;
24 import org.apache.wss4j.common.crypto.CryptoType;
25 import org.apache.wss4j.common.saml.SAMLCallback;
26 import org.apache.wss4j.common.saml.bean.AdviceBean;
27 import org.apache.wss4j.common.saml.bean.KeyInfoBean;
28 import org.apache.wss4j.common.saml.bean.SubjectBean;
29 import org.apache.wss4j.common.saml.bean.Version;
30 import org.apache.wss4j.common.saml.builder.SAML1Constants;
31
32 import javax.security.auth.callback.Callback;
33 import javax.security.auth.callback.UnsupportedCallbackException;
34
35 import java.io.IOException;
36
37
38
39
40
41 public class SAML1CallbackHandler extends AbstractSAMLCallbackHandler {
42
43 public SAML1CallbackHandler() throws Exception {
44 if (certs == null) {
45 Crypto crypto = CryptoFactory.getInstance("wss40.properties");
46 CryptoType cryptoType = new CryptoType(CryptoType.TYPE.ALIAS);
47 cryptoType.setAlias("wss40");
48 certs = crypto.getX509Certificates(cryptoType);
49 }
50
51 subjectName = "uid=joe,ou=people,ou=saml-demo,o=example.com";
52 subjectQualifier = "www.example.com";
53 confirmationMethod = SAML1Constants.CONF_SENDER_VOUCHES;
54 issuer = "www.example.com";
55 }
56
57 public void handle(Callback[] callbacks)
58 throws IOException, UnsupportedCallbackException {
59 for (Callback callback : callbacks) {
60 if (callback instanceof SAMLCallback) {
61 SAMLCallback samlCallback = (SAMLCallback) callback;
62 samlCallback.setSamlVersion(Version.SAML_11);
63 samlCallback.setIssuer(issuer);
64 if (conditions != null) {
65 samlCallback.setConditions(conditions);
66 }
67 samlCallback.setIssuerCrypto(getIssuerCrypto());
68 samlCallback.setIssuerKeyName(getIssuerName());
69 samlCallback.setIssuerKeyPassword(getIssuerPassword());
70
71 if (getAssertionAdviceElement() != null) {
72 AdviceBean advice = new AdviceBean();
73 advice.getAssertions().add(getAssertionAdviceElement());
74 samlCallback.setAdvice(advice);
75 }
76
77 SubjectBean subjectBean =
78 new SubjectBean(
79 subjectName, subjectQualifier, confirmationMethod
80 );
81 if (subjectNameIDFormat != null) {
82 subjectBean.setSubjectNameIDFormat(subjectNameIDFormat);
83 }
84 if (SAML1Constants.CONF_HOLDER_KEY.equals(confirmationMethod)) {
85 try {
86 KeyInfoBean keyInfo = createKeyInfo();
87 subjectBean.setKeyInfo(keyInfo);
88 } catch (Exception ex) {
89 throw new IOException("Problem creating KeyInfo: " + ex.getMessage());
90 }
91 }
92 createAndSetStatement(subjectBean, samlCallback);
93 samlCallback.setSignAssertion(signAssertion);
94 } else {
95 throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
96 }
97 }
98 }
99
100 }