Beispiel: Angepasstes Anmeldemodul mit Authentifizierungstoken

Dieser Artikel zeigt, wie festgestellt wird, ob es sich um eine Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.

Weitere Informationen zu den während der Initialisierung, der Anmeldung und der Festschreibung ausführenden Aktionen finden Sie im Artikel Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.

public customLoginModule() 
{
	public void initialize(Subject subject, CallbackHandler callbackHandler,
    Map sharedState, Map options)
	{
				_sharedState = sharedState;
	}

		public boolean login() throws LoginException 
	{
				// Prüft mit WSTokenHolderCallback, ob es sich um eine
  // Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
				Callback callbacks[] = new Callback[1];
				callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
	        
		try 
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
						// Bearbeitet die Ausnahme
		} 
            
				// Empfängt die ArrayList von TokenHolder-Objekten (die serialisierten Token)
				List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
        
				if (authzTokenList != null)
		{
						// Iteriert durch die Liste und sucht das angepasste Token
						for (int i=0; i<authzTokenList.size(); i++)
			{
								TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);

          // Namen und Version der angepassten AuthenticationToken-Implementierung
          // suchen
								if (tokenHolder.getName().equals("your_oid_name") && tokenHolder.getVersion() == 1)
				{
            // Bytes zur Entserialisierung an den angepassten
            // AuthenticationToken-Konstruktor übergeben
										customAuthzToken = new 									
						com.ibm.websphere.security.token.
               CustomAuthenticationTokenImpl(tokenHolder.getBytes());

				}
			}
		}
		else 
          // Dies ist keine Anmeldung durch Weitergabe. Erstellen Sie eine neue
          // Instanz der AuthenticationToken-Implementierung.
		{
        // Ruft den Principal aus dem Standard-AuthenticationToken ab. Dieser
        // muss für alle Standardtoken gültig sein.
        //  Anmerkung: Die Laufzeitumgebung von WebSphere Application Server
        //  setzt dies nur für Standardtoken um. Sie können, müssen dies aber für
        //  angepasste Token nicht tun.
						defaultAuthToken = (com.ibm.wsspi.security.token.AuthenticationToken) 
								sharedState.get(com.ibm.wsspi.security.auth.callback.Constants.WSAUTHTOKEN_KEY);
						String principal = defaultAuthToken.getPrincipal();

       // Fügt ein neues angepasstes Authentifizierungtoken hinzu. Dies
   // ist eine Erstanmeldung. Übergeben Sie den Principal an den
       // Konstruktor.
						customAuthToken = new com.ibm.websphere.security.token.
          CustomAuthenticationTokenImpl(principal);

						// Fügt alle Anfangsattribute hinzu
						if (customAuthToken != null)
			{
								customAuthToken.addAttribute("key1", "value1");
								customAuthToken.addAttribute("key1", "value2");
								customAuthToken.addAttribute("key2", "value1");
								customAuthToken.addAttribute("key3", "something different");
			}
		}

     // Anmerkung: Sie können das Token während der Commit-Operation dem Subject
     // hinzufügen, falls während der Anmeldung ein Fehler auftritt.
	}

		public boolean commit() throws LoginException 
	{
					if (customAuthToken != null)
		{
						// Legt das customAuthToken im Subject fest
			try 
			{
								private final AuthenticationToken customAuthTokenPriv = customAuthToken;
          // Führen Sie diesen Schritt in einem doPrivileged-Codeblock aus, damit der Anwendungscode
          // keine zusätzlichen Berechtigungen hinzufügen muss.
								java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() 
				{
										public Object run() 
					{
						try 
						{
                  // Fügt das angepasste Authentifizierungstoken hinzu, falls
                  // es nicht null und noch nicht im Subject enthalten ist.
                          						if ((customAuthTokenPriv != null) && 			
																		(!subject.getPrivateCredentials().
                        contains(customAuthTokenPriv)))
							{
																subject.getPrivateCredentials().add(customAuthTokenPriv);
							}
						} 
						catch (Exception e)
						{
									throw new WSLoginFailedException (e.getMessage(), e);
						}

						return null;
					}
				});
			}
			catch (Exception e)
			{
						throw new WSLoginFailedException (e.getMessage(), e);
			}
		}
	}

		// Variablen für das Anmeldemodul definieren
		com.ibm.wsspi.security.token.AuthenticationToken customAuthToken = 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_custauthenttokenlmodule
Dateiname:xsec_custauthenttokenlmodule.html