Beispiel: Angepasstes Anmeldemodul mit SSO-Token
Diese Datei zeigt, wie festgestellt wird, ob es sich um eine Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
Informationen zur Initialisierung und zu den Aktionen während der Anmeldung und der Festschreibung finden Sie unter 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)
{
// Behandlung der 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
for (int i=0; i<authzTokenList.size(); i++)
{
TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);
// Sucht den Namen und die Version Ihrer
// SingleSignonToken-Implementierung
if (tokenHolder.getName().equals("myCookieName")
&& tokenHolder.getVersion() == 1)
{
// Übergibt die Bytes zum Entserialisieren an den kundenspezifischen
// SingleSignonToken-Konstruktor
customSSOToken = new
com.ibm.websphere.security.token.CustomSingleSignonTokenImpl
(tokenHolder.getBytes());
}
}
}
else
// Dies ist keine Anmeldung durch Weitergabe. Erstellen Sie eine neue
// Instanz der SingleSignonToken-Implementierung.
{
// Ruft den Principal aus dem Standard-SingleSignonToken ab. Dieser
// muss für alle Token gültig sein.
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 benuterdefiniertes SSO-Token hinzu. Dies
// ist eine Erstanmeldung.
// Übergeben des Principal an den Konstruktor
customSSOToken = new com.ibm.websphere.security.token.
CustomSingleSignonTokenImpl(principal);
// Anfangsattribute hinzufügen
if (customSSOToken != null)
{
customSSOToken.addAttribute("key1", "value1");
customSSOToken.addAttribute("key1", "value2");
customSSOToken.addAttribute("key2", "value1");
customSSOToken.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 (customSSOToken != null)
{
// Legt das customSSOToken-Token im Subject fest
try
{
public final SingleSignonToken customSSOTokenPriv = customSSOToken;
// Fügen Sie dies in einen doPrivileged-Codeblock ein, damit der
// Anwendungscode keine weiteren Berechtigungen hinzufügen muss.
java.security.AccessController.doPrivileged(new java.security.PrivilegedAction()
{
public Object run()
{
try
{
// Fügt das angepasste SSO-Token hinzu, wenn es nicht null und
// noch nicht im Subject enthalten ist.
if ((customSSOTokenPriv != null) &&
(!subject.getPrivateCredentials().
contains(customSSOTokenPriv)))
{
subject.getPrivateCredentials().
add(customSSOTokenPriv);
}
}
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.SingleSignonToken customSSOToken = null;
com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
java.util.Map _sharedState = null;
}