use of com.sun.identity.federation.message.FSAuthnRequestEnvelope in project OpenAM by OpenRock.
the class FSLoginHelper method createAuthnRequestEnvelope.
/**
* Creates <code>AuthnRequestEnvelope</code> for <code>LECP</code> profile.
* @param request <code>HttpServletRequest</code> object
* @return xml string of an <code>AuthnRequestEnvelope</code> object
*/
public String createAuthnRequestEnvelope(HttpServletRequest request) {
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequestEnvelope(): called" + request.getParameter("metaAlias"));
}
try {
String metaAlias = request.getParameter("metaAlias");
//FSServiceUtils.getMetaAlias(request);
setMetaInfo(metaAlias, null);
FSAuthnRequest authnRequest = null;
Map headerMap = new HashMap();
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String hn = headerNames.nextElement().toString();
String hv = request.getHeader(hn);
headerMap.put(hn, hv);
}
Set idpSet = getIDPs(metaAlias);
String LRURL = request.getParameter(IFSConstants.LRURL);
if (LRURL == null || LRURL.equals("")) {
LRURL = FSServiceUtils.getFederationDonePageURL(request, hostConfig, metaAlias);
}
authnRequest = getAuthnReq(headerMap, LRURL, true);
authnRequest.setMinorVersion(FSServiceUtils.getMinorVersion(hostDescriptor.getProtocolSupportEnumeration()));
if (authnRequest == null) {
FSUtils.debug.error("FSLoginHelper.createAuthnRequest()::AuthnRequest is null");
return errorPage + "&" + IFSConstants.FEDERROR + "=" + URLEncDec.encode("Unable to create AuthnRequest") + "&" + IFSConstants.FEDREMARK + "=" + URLEncDec.encode("Please check your Federation Configuration.");
}
String requestID = authnRequest.getRequestID();
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest()::RequestID: " + requestID);
}
FSSessionManager sessMngr = FSSessionManager.getInstance(metaAlias);
sessMngr.setAuthnRequest(requestID, authnRequest);
Object ssoToken = SessionManager.getProvider().getSession(request);
if (ssoToken != null) {
sessMngr.setLocalSessionToken(requestID, ssoToken);
}
//check if dontgotothird level domain flag is off is yes
//if yes then get one provider and and send to intersiteurl
//else send to third level domain for provider id
//also check if there is a single idp if yes go to intersite
//transfer with providerid
//*****************
FSAuthnRequestEnvelope authnRequestEnvelope = null;
boolean isPassive = false;
FSIDPList idpList = null;
//get IDPList from directory
String assertionConsumerURL = FSServiceUtils.getAssertionConsumerServiceURL(hostDescriptor, null);
List idpEntryList = null;
String idpID = null;
String idpLocation = null;
Iterator iter = idpSet.iterator();
while (iter.hasNext()) {
idpID = (String) iter.next();
if (idpID != null) {
IDPDescriptorType idpDescr = metaManager.getIDPDescriptor(realm, idpID);
idpLocation = idpDescr.getSingleSignOnServiceURL();
if (idpEntryList == null) {
idpEntryList = new ArrayList();
}
idpEntryList.add(new IDPEntry(idpID, idpID, idpLocation));
}
}
int minorVersion = FSServiceUtils.getMinorVersion(hostDescriptor.getProtocolSupportEnumeration());
IDPEntries idpEntries = new IDPEntries(idpEntryList);
idpList = new FSIDPList(idpEntries, null);
idpList.setMinorVersion(minorVersion);
if (FSServiceUtils.isSigningOn()) {
if (hostDescriptor.isAuthnRequestsSigned()) {
authnRequest.signXML(IDFFMetaUtils.getFirstAttributeValueFromConfig(hostConfig, IFSConstants.SIGNING_CERT_ALIAS));
}
}
authnRequestEnvelope = new FSAuthnRequestEnvelope(authnRequest, hostEntityID, hostEntityID, assertionConsumerURL, idpList, isPassive);
authnRequestEnvelope.setMinorVersion(minorVersion);
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest: " + "AuthnRequestEnvelope: " + authnRequestEnvelope.toXMLString());
}
return authnRequestEnvelope.toXMLString();
} catch (Exception e) {
FSUtils.debug.error("FSLoginHelper.createAuthnRequest():Exception Occured: ", e);
return null;
}
}
use of com.sun.identity.federation.message.FSAuthnRequestEnvelope in project OpenAM by OpenRock.
the class FSLoginHelper method createAuthnRequest.
/**
* Returns a Map of headers,lrurl/responsedata.
* @param headers Map of headers
* @param LRURL relay state url
* @param authLevel authentication level
* @param metaAlias meta alias of hosted provider
* @param remoteEntityID remote provider's entity ID
* @param isFedCookiePresent if fed cookie present or not
* @return Map of headers and lrurl/responedata
* @exception FSLoginHelperException if error occurrs
*/
public Map createAuthnRequest(Map headers, String LRURL, String authLevel, String metaAlias, String remoteEntityID, boolean isFedCookiePresent) throws FSLoginHelperException {
Map retHeaderMap = new HashMap();
setMetaInfo(metaAlias, authLevel);
FSUtils.debug.message("FSLoginHelper.createAuthnRequest(): called");
FSAuthnRequest authnRequest = null;
if (remoteEntityID != null) {
authnRequest = getAuthnReq(headers, LRURL, true);
} else {
authnRequest = getAuthnReq(headers, LRURL, false);
}
if (authnRequest == null) {
FSUtils.debug.error("FSLoginHelper.createAuthnRequest()::AuthnRequest is null");
String redirectURL = errorPage + "&" + IFSConstants.FEDERROR + "=" + URLEncDec.encode("Unable to create AuthnRequest") + "&" + IFSConstants.FEDREMARK + "=" + URLEncDec.encode("Please check your Federation Configuration.");
return createMap(redirectURL, null, retHeaderMap);
}
String requestID = authnRequest.getRequestID();
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest()::RequestID: " + requestID);
}
FSSessionManager sessMngr = FSSessionManager.getInstance(metaAlias);
sessMngr.setAuthnRequest(requestID, authnRequest);
sessMngr.setIDPEntityID(requestID, remoteEntityID);
String redirectURL = null;
//check if dontgotothird level domain flag is off is yes
//if yes then get one provider and and send to intersiteurl
//else send to third level domain for provider id
//also check if there is a single idp if yes go to intersite transfer
//with providerid
boolean isSingleIDP = true;
boolean isSSO = false;
Set idpSet = getIDPs(metaAlias);
if (remoteEntityID == null) {
isSSO = true;
}
if (idpSet.size() > 1) {
isSingleIDP = false;
}
//*****************
if (isLECPProfile(headers)) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest():LECP Request Identified");
retHeaderMap.put("content-type", IFSConstants.LECP_CONTENT_TYPE_HEADER);
String responseData = null;
try {
FSAuthnRequestEnvelope authnRequestEnvelope = null;
boolean isPassive = false;
FSIDPList idpList = null;
//get IDPList from directory
String assertionConsumerURL = FSServiceUtils.getAssertionConsumerServiceURL(hostDescriptor, null);
List idpEntryList = null;
String idpID = null;
String idpName = null;
String idpLocation = null;
Iterator iter = idpSet.iterator();
while (iter.hasNext()) {
idpID = (String) iter.next();
if (idpID != null) {
IDPDescriptorType idpDescr = metaManager.getIDPDescriptor(realm, idpID);
idpLocation = idpDescr.getSingleSignOnServiceURL();
if (idpEntryList == null) {
idpEntryList = new ArrayList();
}
idpEntryList.add(new IDPEntry(idpID, idpID, idpLocation));
}
}
IDPEntries idpEntries = new IDPEntries(idpEntryList);
idpList = new FSIDPList(idpEntries, null);
int minorVersion = FSServiceUtils.getMinorVersion(hostDescriptor.getProtocolSupportEnumeration());
idpList.setMinorVersion(minorVersion);
authnRequest.setMinorVersion(minorVersion);
if (FSServiceUtils.isSigningOn()) {
if (hostDescriptor.isAuthnRequestsSigned()) {
authnRequest.signXML(IDFFMetaUtils.getFirstAttributeValueFromConfig(hostConfig, IFSConstants.SIGNING_CERT_ALIAS));
}
}
authnRequestEnvelope = new FSAuthnRequestEnvelope(authnRequest, hostEntityID, hostEntityID, assertionConsumerURL, idpList, isPassive);
authnRequestEnvelope.setMinorVersion(minorVersion);
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest: " + "AuthnRequestEnvelope: " + authnRequestEnvelope.toXMLString());
}
responseData = authnRequestEnvelope.toXMLString();
// responseData = authnRequestEnvelope.toBASE64EncodedString();
} catch (Exception e) {
FSUtils.debug.error("FSLoginHelper.createAuthnRequest(): " + "Exception Occured: " + e.getMessage());
}
Map retMap = createMap(null, responseData, retHeaderMap);
retMap.put(authnReqIDKey, requestID);
return retMap;
}
//*****************
String tldURL = getTLDURL();
if (isSSO && tldURL != null && !isSingleIDP) {
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper:: createAuthnRequest " + "In case where isSSO true and tldURL is true and not " + "single idp. So redirecting to thirdlevel domain");
}
redirectURL = tldURL + "?" + IFSConstants.LRURL + "=" + URLEncDec.encode(interSiteURL + "?" + authnReqIDKey + "=" + URLEncDec.encode(requestID) + "&" + IFSConstants.META_ALIAS + "=" + metaAlias);
} else if (isSSO && !isSingleIDP) {
if (FSUtils.debug.messageEnabled())
FSUtils.debug.message("FSLoginHelper:: createAuthnRequest " + " In case where isSSO true and not a single idp so have " + "show common login page");
Map retMap = createMap(null, null, retHeaderMap);
retMap.put(authnReqIDKey, requestID);
return retMap;
} else {
boolean noIDP = false;
if (remoteEntityID == null) {
if (idpSet != null && idpSet.size() > 0) {
remoteEntityID = (String) idpSet.iterator().next();
} else {
FSUtils.debug.error("FSLoginHelper:: no idps found in config." + " Cannot proceed.");
redirectURL = errorPage + "&" + IFSConstants.FEDERROR + "=" + URLEncDec.encode("No IDPs Found in Configuration.") + "&" + IFSConstants.FEDREMARK + "=" + URLEncDec.encode("Please configure you Federation Services for an IDP.");
noIDP = true;
}
}
if (!noIDP) {
String succintID = FSUtils.generateSourceID(remoteEntityID);
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper:: createAuthnRequest " + " Redirecting to intersiteTransfer URL " + interSiteURL + " with providerID and Base64 encoded SuccintID. " + remoteEntityID + "---" + succintID);
}
//check for presence of federate cookie
if (!isFedCookiePresent) {
if (actionOnNoFedCookie.equals(IFSConstants.COMMON_LOGIN)) {
Map retMap = createMap(null, null, retHeaderMap);
retMap.put(authnReqIDKey, requestID);
return retMap;
} else if (actionOnNoFedCookie.equals(IFSConstants.ACTIVE)) {
changeToPassiveAuthnRequest(requestID, false, metaAlias);
} else {
changeToPassiveAuthnRequest(requestID, true, metaAlias);
}
}
String providerID = FSUtils.stringToBase64(succintID);
redirectURL = interSiteURL + "?" + authnReqIDKey + "=" + URLEncDec.encode(requestID) + "&" + providerIDKey + "=" + URLEncDec.encode(providerID) + "&" + IFSConstants.META_ALIAS + "=" + metaAlias;
}
}
/**
* If this flag is set via the query param, we will always make
* a passive call to the IDP.
*/
if (isPassiveQuery) {
changeToPassiveAuthnRequest(requestID, true, metaAlias);
}
if (FSUtils.debug.messageEnabled()) {
FSUtils.debug.message("FSLoginHelper.createAuthnRequest()::" + "redirectURL : " + redirectURL);
}
if (isWMLProfile(headers)) {
retHeaderMap.put("content-type", "text/vnd.wap.wml");
} else {
retHeaderMap.put("content-type", "text/html");
}
Map retMap = createMap(redirectURL, null, retHeaderMap);
retMap.put(authnReqIDKey, requestID);
return retMap;
}
Aggregations