CommandLineSSO.java revision 386650a8957e131311273ee84a4a4113ad5e3fe2
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster/**
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * The contents of this file are subject to the terms
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * of the Common Development and Distribution License
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * (the License). You may not use this file except in
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * compliance with the License.
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * You can obtain a copy of the License at
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * opensso/legal/CDDLv1.0.txt
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * See the License for the specific language governing
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * permission and limitations under the License.
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * When distributing Covered Code, include this CDDL
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * Header Notice in each file and include the License file
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * at opensso/legal/CDDLv1.0.txt.
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * If applicable, add the following below the CDDL Header,
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * with the fields enclosed by brackets [] replaced by
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * your own identifying information:
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * $Id: CommandLineSSO.java,v 1.3 2008/06/25 05:41:14 qcheng Exp $
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster *
a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington */
a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterpackage com.sun.identity.samples.sso;
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.iplanet.sso.SSOToken;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.iplanet.sso.SSOTokenManager;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.sun.identity.idm.AMIdentity;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.sun.identity.idm.IdRepoException;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.sun.identity.idm.IdUtils;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.sun.identity.authentication.AuthContext;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport com.sun.identity.authentication.spi.AuthLoginException;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.io.BufferedReader;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.io.InputStream;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.io.InputStreamReader;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.io.IOException;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.io.PushbackInputStream;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.util.Arrays;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.util.Iterator;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.util.Map;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport java.util.Set;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport javax.security.auth.callback.Callback;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport javax.security.auth.callback.NameCallback;
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterimport javax.security.auth.callback.PasswordCallback;
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster/**
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * This sample demonstrates the use of retrieving user profile from the correct
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster * user credential.
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster */
0a99555401a033704f1f171baab6db11fb5528f2Allan Fosterpublic class CommandLineSSO {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster public static void main(String args[]) throws Exception {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster String orgName = args[0];
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("Organization: " + orgName);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster SSOTokenManager manager = SSOTokenManager.getInstance();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster AuthContext lc = getAuthcontext(orgName);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster if (lc.getStatus() == AuthContext.Status.SUCCESS) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("Successful authentication ...");
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster SSOToken token = lc.getSSOToken();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster String userDN = token.getPrincipal().getName();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("User Name: " + userDN);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster try {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster AMIdentity userIdentity = IdUtils.getIdentity(token);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster Map attrs = userIdentity.getAttributes();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("User Attributes: ");
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster for (Iterator i = attrs.keySet().iterator(); i.hasNext(); ) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster String attrName = (String)i.next();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster Set values = (Set)attrs.get(attrName);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println(attrName + "=" + values);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster } catch (IdRepoException e) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster e.printStackTrace();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster } finally {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster manager.destroyToken(token);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster } else {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("Authentication Failed ....... ");
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.exit(0);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster // Creates AuthContext and submits requirements
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster private static AuthContext getAuthcontext(String orgName)
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster throws AuthLoginException, IOException
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster AuthContext lc = new AuthContext(orgName);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster AuthContext.IndexType indexType = AuthContext.IndexType.MODULE_INSTANCE;
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster String indexName = "DataStore";
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.println("DataStore: Obtained login context");
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster lc.login(indexType, indexName);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster Callback[] callback = lc.getRequirements();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster for (int i =0 ; i< callback.length ; i++) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster if (callback[i] instanceof NameCallback) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster NameCallback name = (NameCallback) callback[i];
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.print(name.getPrompt());
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster name.setName((new BufferedReader(
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster new InputStreamReader(System.in))).readLine());
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster } else if (callback[i] instanceof PasswordCallback) {
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster PasswordCallback pass = (PasswordCallback) callback[i];
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster System.out.print(pass.getPrompt());
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster String password = (new BufferedReader(
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster new InputStreamReader(System.in))).readLine();
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster pass.setPassword(password.toCharArray());
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster lc.submitRequirements(callback);
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster return lc;
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster }
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster}
0a99555401a033704f1f171baab6db11fb5528f2Allan Foster