O SAMLGenerateLoginModule pode ser usado para obter um token do SAML gerado por aplicativo a partir de um objeto de estado compartilhado incializado no módulo de login do JAAS do aplicativo.
Adicionalmente, o GenericIssuedTokenGenerateLoginModule poderá também ser usado para obter um
token SAML gerado pelo aplicativo a partir do estado compartilhado. Para obter informações adicionais, leia o tópico Gerando e consumindo tokens SAML usando módulos de login JAAS empilhados.
Sobre Esta Tarefa
O procedimento a seguir descreve a configuração necessária para usar esta funcionalidade.
Procedimento
- Salve fora do objeto de estado compartilhado em uma variável de classe no método Inicializar do módulo de login do JAAS.
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
import com.ibm.websphere.wssecurity.wssapi.token.SAMLToken;
import com.ibm.wsspi.wssecurity.core.Constants;
public class myLoginModule implements LoginModule {
...
private Map _sharedState;
...
public void initialize(Subject subject,
CallbackHandle rcallbackHandler,
Map<String, ?> sharedState,
Map<String, ?> options) {
...
this._sharedState = sharedState;
...
}
- Coloque o SAMLToken gerado pelo aplicativo no objeto sharedState, usando um dos métodos a seguir:
- Crie um ArrayList de SecurityToken e coloque o aplicativo gerado SAMLToken como a única entrada nesta lista. O tempo de execução do WS-Security executa loops pela lista e usa apenas a primeira ocorrência.
- Coloque o objeto ArrayList no objeto _sharedState com a chave com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_TOKEN_TO_BE_INSERTED.
com.ibm.wsspi.wssecurity.core.Constants.
WSSECURITY_TOKEN_TO_BE_INSERTED
public boolean login() throws LoginException {
...
SAMLToken mySamlToken=someSAMLToken;
ArrayList<SecurityToken> tokenList =
new ArrayList<SecurityToken>();
tokenList.add(mySamlToken);
_sharedState.put(
Constants.WSSECURITY_TOKEN_TO_BE_INSERTED,
tokenList);
...
}
- Use o método GenericSecurityTokenFactory.putGeneratorTokenToSharedState para colocar o token SAML no objeto _sharedState.
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
public boolean login() throws LoginException {
...
SAMLToken mySamlToken=someSAMLToken;
GenericSecurityTokenFactory factory = GenericSecurityTokenFactory.getInstance();
factory.putGeneratorTokenToSharedState(this._sharedState, mySamlToken);
...
}