Programowanie logowania programowego w celu uzyskania danych uwierzytelniania

Aby uzyskać dane uwierzytelniania z aplikacji, można użyć środowiska logowania usługi JAAS (Java Authentication and Authorization Service) (JAAS).

Informacje o tej czynności

Aplikacja może wykonać programowe logowanie JAAS przy użyciu nazwy pozycji kontekstu DefaultPrincipalMapping JAAS w celu uzyskania obiektu Subject z instancją produktu javax.resource.spi.security.PasswordCredential w zestawie informacji autoryzacyjnych prywatnych, który zawiera nazwę użytkownika i hasło skonfigurowane dla elementu authData .

Procedura

  1. Dodaj opcje appSecurity-2.0 i passwordUtilities-1.0 w pliku server.xml . Na przykład:
    
    <featureManager>
       <feature>appSecurity-2.0</feature>
       <feature>passwordUtilities-1.0</feature>
    </featureManager>
  2. Skonfiguruj element authData w pliku server.xml . Na przykład:
    
    <authData id="myAuthData" user="myUser" password="myPassword"/> <!-- password can also be encoded -->
    
    Encode the password within the configuration. You can get the encoded value by using the securityUtility encode command.
  3. Należy wykonać programowe logowanie z użyciem nazwy wpisu kontekstu logowania DefaultPrincipalMapping JAAS z serwletu aplikacji lub komponentu EJB, zastępując alias odwzorowania tym, który jest potrzebny. Na przykład:
    
    HashMap map = new HashMap();
    map.put(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS, "myAuthData"); // Replace value with your alias.
    CallbackHandler callbackHandler = new com.ibm.wsspi.security.auth.callback.WSMappingCallbackHandler(map, null);
    LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
    loginContext.login();
    Subject subject = loginContext.getSubject();
    Set<javax.resource.spi.security.PasswordCredential> creds = subject.getPrivateCredentials(javax.resource.spi.security.PasswordCredential.class);
    PasswordCredential passwordCredential = creds.iterator().next();
    Uwaga: Obsługa błędów nie jest pokazywaana w celu uproszczenia. Jeśli żądany alias uwierzytelniania nie istnieje lub jest zniekształcony, zwracana jest wartość javax.security.auth.login.LoginException .
  4. Uzyskaj nazwę użytkownika i hasło z PasswordCredential. Na przykład:
    
    String userName = passwordCredential.getUserName();
    char[] password = passwordCredential.getPassword();
    // Do something with the userName and password.
  5. Jeśli zabezpieczenia Java 2 są włączone, to aplikacja musi mieć uprawnienia javax.security.auth.PrivateCredentialPermission. Na przykład można nadać uprawnienie w pliku META-INF/permissions.xml aplikacji, aby uzyskać dostęp do obiektu PasswordCredential :
    
    <?xml version="1.0" encoding="UTF-8"?>
    <permissions xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/permissions_7.xsd" version="7">
    
      <permission>
        <class-name>javax.security.auth.PrivateCredentialPermission</class-name>
        <name>javax.resource.spi.security.PasswordCredential * "*"</name>
        <actions>read</actions>
      </permission>
    
      <!-- Other permissions -->
    
    </permissions>

    Więcej informacji na ten temat zawiera sekcja Zabezpieczenia Java 2.