}
protected Assertion createSAML20Assertion(final String assertionId, final String issuer, final String appliesTo, final KeyInfo keyInfo, final Map<QName, List<String>> claimedAttrs, String keyType) throws WSTrustException{
Assertion assertion = null;
try{
final SAMLAssertionFactory samlFac = SAMLAssertionFactory.newInstance(SAMLAssertionFactory.SAML2_0);
// Create Conditions
final TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
final GregorianCalendar issueInst = new GregorianCalendar(utcTimeZone);
final GregorianCalendar notOnOrAfter = new GregorianCalendar(utcTimeZone);
notOnOrAfter.add(Calendar.MILLISECOND, (int)stsConfig.getIssuedTokenTimeout());
List<AudienceRestriction> arc = null;
if (appliesTo != null){
arc = new ArrayList<AudienceRestriction>();
List<String> au = new ArrayList<String>();
au.add(appliesTo);
arc.add(samlFac.createAudienceRestriction(au));
}
KeyInfoConfirmationData keyInfoConfData = null;
String confirMethod = (String)stsConfig.getOtherOptions().get(WSTrustConstants.SAML_CONFIRMATION_METHOD);
if (confirMethod == null){
if (keyType.equals(wstVer.getBearerKeyTypeURI())){
confirMethod = SAML_BEARER_2_0;
}else{
confirMethod = SAML_HOLDER_OF_KEY_2_0;
if (keyInfo != null){
keyInfoConfData = samlFac.createKeyInfoConfirmationData(keyInfo.getElement());
}
}
}
final Conditions conditions = samlFac.createConditions(issueInst, notOnOrAfter, null, arc, null, null);
// Create Subject
// SubjectConfirmationData subjComfData = samlFac.createSubjectConfirmationData(
// null, null, null, null, appliesTo, keyInfo.getElement());
final SubjectConfirmation subjectConfirm = samlFac.createSubjectConfirmation(
null, keyInfoConfData, confirMethod);
com.sun.xml.wss.saml.Subject subj = null;
//final List<Attribute> attrs = new ArrayList<Attribute>();
QName idName = null;
final Set<Map.Entry<QName, List<String>>> entries = claimedAttrs.entrySet();
for(Map.Entry<QName, List<String>> entry : entries){
final QName attrKey = entry.getKey();
final List<String> values = entry.getValue();
if (values != null && values.size() > 0){
if (STSAttributeProvider.NAME_IDENTIFIER.equals(attrKey.getLocalPart()) && subj == null){
final NameID nameId = samlFac.createNameID(values.get(0), attrKey.getNamespaceURI(), null);
subj = samlFac.createSubject(nameId, subjectConfirm);
idName = attrKey;
}
//else{
// final Attribute attr = samlFac.createAttribute(attrKey.getLocalPart(), attrKey.getNamespaceURI(), values);
// attrs.add(attr);
//}
}
}
if (idName != null){
claimedAttrs.remove(idName);
}
final List<Object> statements = new ArrayList<Object>();
//if (attrs.isEmpty()){
if (claimedAttrs.isEmpty()){
AuthnContext ctx = samlFac.createAuthnContext(this.authnCtxClass, null);
final AuthnStatement statement = samlFac.createAuthnStatement(issueInst, null, ctx, null, null);
statements.add(statement);
}else{
final AttributeStatement statement = samlFac.createAttributeStatement(null);
statements.add(statement);
}
final NameID issuerID = samlFac.createNameID(issuer, null, null);
// Create Assertion
assertion =
samlFac.createAssertion(assertionId, issuerID, issueInst, conditions, null, null, statements);
if (!claimedAttrs.isEmpty()){
assertion = WSTrustUtil.addSamlAttributes(assertion, claimedAttrs);
}
((com.sun.xml.wss.saml.assertion.saml20.jaxb20.Assertion)assertion).setSubject((com.sun.xml.wss.saml.internal.saml20.jaxb20.SubjectType)subj);
//return assertion;