Beispiel: Angepasstes Anmeldemodul für Zuordnung eingehender Anforderungen

Dieses Beispiel beschreibt ein angepasstes Anmeldemodul, das eine java.util.Hashtable basierend auf dem angegebenen NameCallback erstellt. Die java.util.Hashtable wird sharedState java.util.Map hinzugefügt, damit die WAS-Anmeldemodule die Informationen in der Hashtabelle lokalisieren können.

public customLoginModule() 
{

public void initialize(Subject subject, CallbackHandler callbackHandler,
   Map sharedState, Map options)
{
			// (Weitere Informationen zur Initialisierung finden Sie im Abschnitt
	//  Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.)
			_sharedState = sharedState;
}

	public boolean login() throws LoginException 
{
	// (Nähere Informationen zu den während der Anmeldung auszuführen Aktionen finden Sie im Artikel
	//  Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.)

   		// Prüft mit WSTokenHolderCallback, ob es sich um eine
  // Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
		javax.security.auth.callback.Callback callbacks[] = 
     new javax.security.auth.callback.Callback[3];
		callbacks[0] = new javax.security.auth.callback.NameCallback("");
			callbacks[1] = new javax.security.auth.callback.PasswordCallback(
     "Password: ", false);
	callbacks[2] = new com.ibm.websphere.security.auth.callback.
     WSCredTokenCallbackImpl("");
	callbacks[3] = new com.ibm.wsspi.security.auth.callback.
     WSTokenHolderCallback("");

	try
	{
		callbackHandler.handle(callbacks);
	} 
	catch (Exception e) 
	{
					// Ausnahme behandeln
	} 

		// Bestimmt, welche Callbacks Informationen enthalten
		boolean identitySwitched = false;
		String uid = ((NameCallback) callbacks[0]).getName();
		char password[] = ((PasswordCallback) callbacks[1]).getPassword();
		byte[] credToken = ((WSCredTokenCallbackImpl) callbacks[2]).getCredToken();
		java.util.List authzTokenList = ((WSTokenHolderCallback) callbacks[3]).
     getTokenHolderList();

		if (credToken != null)
	{
		try
		{
						String uniqueID = WSSecurityPropagationHelper.validateLTPAToken(credToken);
						String realm = WSSecurityPropagationHelper.getRealmFromUniqueID (uniqueID);
       // Zeichenfolge auf die UID setzen, damit die Informationen für
       // Zuordnung oder Anmeldung verwendet werden können
						uid = WSSecurityPropagationHelper.getUserFromUniqueID (uniqueid);
		}
		catch (Exception e) 
		{
				// Behandlung der Ausnahme
		}	
	}
		else if (uid == null)
	{
				// Die Authentifizierungsdaten sind nicht gültig. Sie müssen
  // die UID oder das CredToken angeben.
				throw new WSLoginFailedException("invalid authentication data.");
	}
		else if (uid != null && password != null)
	{
     // Dies ist eine typische Authentifizierung. Sie können festlegen, dass diese ID einer anderen ID
     // zugeordnet werden soll oder Sie können den Schritt überspringen und WebSphere Application Server
     // die Anmeldung durchführen lassen. Wenn Kennwörter angegeben werden, achten Sie darauf,
     // das Kennwort zu validieren, da es sich um die erste Authentifizierung handelt.
		
		return true;
	}

  // Sie können diese UID nach Bedarf einem anderen Element zuordnen und identitySwitched
  // boolean setzen. Wenn die Identität geändert wurde, löschen Sie die folgenden
  // weitergegebenen Attribute, damit sie nicht falsch verwendet werden.
		uid = myCustomMappingRoutine (uid);
	
		// Weitergeleitete Attribute löschen, weil sie für die neue Identität nicht mehr gültig sind
		if (identitySwitched)
	{
				((WSTokenHolderCallback) callbacks[3]).setTokenHolderList(null);
	}
		boolean requiresLogin = ((com.ibm.wsspi.security.auth.callback.
     WSTokenHolderCallback) callbacks[2]).getRequiresLogin();

		if (requiresLogin || identitySwitched)
	{
			    // Standard-InitialContext für den Server abrufen
		javax.naming.InitialContext ctx = new javax.naming.InitialContext();

				// Lokales UserRegistry-Objekt abrufen
				com.ibm.websphere.security.UserRegistry reg = 
         (com.ibm.websphere.security.UserRegistry) ctx.lookup("UserRegistry");				

			   // Ruft die uniqueID der Registry ab, die auf dem im 
     // NameCallback angegebenen Benutzer-ID basiert.
			   String uniqueid = reg.getUniqueUserId(uid);
	 				uid = WSSecurityPropagationHelper.getUserFromUniqueID (uniqueid);
			
		// Ruft den auf der uniqueID basierenden Anzeigenamen von der Benutzerregistry ab.
				String securityName = reg.getUserSecurityName(uid);
	
			   // Gruppen für diese eindeutige ID abrufen
			   java.util.List groupList = reg.getUniqueGroupIds(uid);
			
			   // Erstellt die java.util.Hashtable mit den Informationen, die Sie 
     // in der UserRegistry-Implementierung erfasst haben.
			   java.util.Hashtable hashtable = new java.util.Hashtable();
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_UNIQUEID, uniqueid);
     hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_SECURITYNAME, securityName);
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_GROUPS, groupList);

		// Fügt einen Cacheschlüssel hinzu, der als Teil des Mechanismus für die Suche nach
       // dem erstellten Subjekt verwendet wird. Der Cacheschlüssel kann ein Objekt sein,
     // hat aber eine implementierte Methode toString. Vergewissern Sie
     // sich, dass der cacheKey genügend Informationen enthält, um den Benutzer und alle
     // weiteren verwendeten Attribute abzudecken. Wird diese Eigenschaft nicht angegeben,
     // wird das Subject standardmäßig der	zurückgegebenen WSCREDENTIAL_UNIQUEID zugeordnet.
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_CACHE_KEY, "myCustomAttribute" + uniqueid);
			   // Hashtabelle dem gemeinsam genutzten Status des Subject hinzufügen
				_sharedState.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_PROPERTIES_KEY, hashtable);
	}
		else if (requiresLogin == false)
	{
		// Weitere Informationen zu diesem Abschnitt finden Sie im Artikel
     // Weitergabe von Sicherheitsattributen.
				// Wenn Sie eine eigene Tokenimplementierung hinzugefügt haben, können
     // Sie für die Entserialisierung die Liste der Tokenbesitzer durchsuchen.
				// Anmerkung: Alle Java-Objekte werden automatisch vom
    // wsMapDefaultInboundLoginModule entserialisiert.
		
					for (int i=0; i<authzTokenList.size(); i++)
		{
						TokenHolder tokenHolder = (TokenHolder) authzTokenList.get(i);
						if (tokenHolder.getName().equals("com.acme.MyCustomTokenImpl"))
			{
												byte[] myTokenBytes = tokenHolder.getBytes();

          // Bytes zur Entserialisierung an den Konstruktor der
          // Implementierungsklasse übergeben
												com.acme.MyCustomTokenImpl myTokenImpl = new com.acme.MyCustomTokenImpl(myTokenBytes);
			}
		}
	}
}

	public boolean commit() throws LoginException 
{
	// (Weitere Informationen zu den während der Commit-Operation auszuführenden
// Aktionen finden Sie im Artikel Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.)
}

	// Variablen für das Anmeldemodul definieren
	com.ibm.wsspi.security.token.AuthorizationToken customAuthzToken = null;
	com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
	java.util.Map _sharedState = null;
}

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_custloginbmap
Dateiname:xsec_custloginbmap.html