a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: AuthnSvcUtils.java,v 1.5 2008/12/05 00:18:02 exu Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.authnsvc;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ResourceBundle;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Document;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Element;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.debug.Debug;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.locale.Locale;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.encode.Base64;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.Constants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.protocol.SASLResponse;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.common.DiscoConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.common.DiscoServiceManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.common.DiscoUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.ObjectFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.ResourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.ResourceOfferingType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.ServiceInstanceType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.plugins.jaxb.DiscoEntryElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.ResourceOffering;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interfaces.ResourceIDMapper;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.security.SecurityAssertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Message;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The class <code>AuthnSvcUtils</code> provides some utils for Authentication
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * service related stuff.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class AuthnSvcUtils {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>ResourceBundle</code> object for this service.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static ResourceBundle bundle =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Locale.getInstallResourceBundle("libAuthnSvc");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>Debug</code> object for this service.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static Debug debug = Debug.getInstance("libIDWSF");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns localized string from resource bundle.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param key a key to a resource bundle.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a localized string
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String getString(String key) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return bundle.getString(key);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Decodes the value of a Data Element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dataE a Data element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a byte array of decoded value
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static byte[] decodeDataElement(Element dataE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (dataE == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String value = XMLUtils.getElementValue(dataE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (value == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return Base64.decode(value);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets resource offering and credentials to the SASL response based on
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * provided sso token.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param saslResp a SASL response
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param message a SOAP message containing a SASL request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userDN Distinguished Name of the User.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if it sets correctly
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static boolean setResourceOfferingAndCredentials(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SASLResponse saslResp, Message message, String userDN)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoEntryElement discoEntry = (DiscoEntryElement)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoServiceManager.getBootstrappingDiscoEntry();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceOfferingType offering = discoEntry.getResourceOffering();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!DiscoServiceManager.useImpliedResource()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceInstanceType serviceInstance =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster offering.getServiceInstance();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String providerID = serviceInstance.getProviderID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceIDMapper idMapper =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoServiceManager.getResourceIDMapper(providerID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (idMapper == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idMapper = DiscoServiceManager.getDefaultResourceIDMapper();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ObjectFactory fac =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new com.sun.identity.liberty.ws.disco.jaxb.ObjectFactory();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceIDType resourceID = fac.createResourceIDType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String resourceIDValue = idMapper.getResourceID(providerID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster userDN);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (AuthnSvcUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcUtils.setResourceOfferingAndCredentials" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Offering: ResourceID Value:" + resourceIDValue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceID.setValue(resourceIDValue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster offering.setResourceID(resourceID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ObjectFactory fac =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new com.sun.identity.liberty.ws.disco.jaxb.ObjectFactory();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceIDType resourceID = fac.createResourceIDType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceID.setValue(DiscoConstants.IMPLIED_RESOURCE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster offering.setResourceID(resourceID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List discoEntryList = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster discoEntryList.add(discoEntry);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map map = DiscoUtils.checkPolicyAndHandleDirectives(userDN,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster message, discoEntryList, null, null, null, message.getToken());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List offerings = (List) map.get(DiscoUtils.OFFERINGS);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (offerings.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (AuthnSvcUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcUtils.setResourceOfferingAndCredentials" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "no ResourceOffering");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceOffering ro = (ResourceOffering)offerings.get(0);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslResp.setResourceOffering(ro);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List assertions = (List) map.get(DiscoUtils.CREDENTIALS);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((assertions != null) && (!assertions.isEmpty())) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator iter = assertions.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List credentials = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (iter.hasNext()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SecurityAssertion assertion =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (SecurityAssertion)iter.next();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document doc = XMLUtils.toDOMDocument(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertion.toString(true, true),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.debug);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentials.add(doc.getDocumentElement());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslResp.setCredentials(credentials);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("AuthnSvcUtils.setResourceOfferingAndCredentials:",ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}