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.SAML2Constants;
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 SAML2CallbackHandler extends AbstractSAMLCallbackHandler {
42
43 public SAML2CallbackHandler() 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 = SAML2Constants.CONF_SENDER_VOUCHES;
54 }
55
56 public void handle(Callback[] callbacks)
57 throws IOException, UnsupportedCallbackException {
58 for (Callback callback : callbacks) {
59 if (callback instanceof SAMLCallback) {
60 SAMLCallback samlCallback = (SAMLCallback) callback;
61 samlCallback.setSamlVersion(Version.SAML_20);
62 samlCallback.setIssuer(issuer);
63 samlCallback.setIssuerFormat(issuerFormat);
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 (subjectConfirmationNameID != null) {
85 subjectBean.setSubjectConfirmationNameID(subjectConfirmationNameID);
86 }
87 subjectBean.setSubjectConfirmationData(subjectConfirmationData);
88 if (SAML2Constants.CONF_HOLDER_KEY.equals(confirmationMethod)) {
89 try {
90 KeyInfoBean keyInfo = createKeyInfo();
91 subjectBean.setKeyInfo(keyInfo);
92 } catch (Exception ex) {
93 throw new IOException("Problem creating KeyInfo: " + ex.getMessage());
94 }
95 }
96 samlCallback.setSubject(subjectBean);
97 createAndSetStatement(null, samlCallback);
98 samlCallback.setSignAssertion(signAssertion);
99 } else {
100 throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
101 }
102 }
103 }
104
105 public void setSubjectName(String newSubjectName) {
106 this.subjectName = newSubjectName;
107 }
108
109 }