Basisauthentifizierung für Web-Service-Zugriff festlegen

Sie können die Basisauthentifizierung konfigurieren, damit Ihre Clientanwendungen auf Web-Services zugreifen können.

Informationen zu dieser Task

Wenn Sie für den Zugriff auf die gesicherten Web-Service-Ressourcen die Web-Service-Clientanwendung mit der Basisauthentifizierung verwenden müssen, muss der Client den Benutzernamen und das Kennwort in der Anforderung angeben, wenn er mit dem Service-Provider kommuniziert.

Vorgehensweise

  1. Aktivieren Sie die Features jaxws-2.2, servlet-3.0(oder servlet-3.1) und appSecurity-2.0 in der Datei server.xml .
    <featureManager>
      <feature>jaxws-2.2</feature>
      <feature>servlet-3.0</feature>
      <feature>appSecurity-2.0</feature>
    </featureManager>
  2. Konfigurieren Sie den Anmelderealm in der Datei server.xml und binden Sie den Realm an den Service-Provider.
    <application id="TransportSecurityProvider" name="TransportSecurityProvider"
                 location="TransportSecurityProvider.war" type="ear">
            <application-bnd>
                <security-role name="Employee">
                    <user name="employee0" />
                    <group name="employeeGroup" />
                </security-role>        
                <security-role name="Manager">
                    <user name="manager0" />
                </security-role>
                <security-role name="AllAuthenticated">
                    <special-subject type="ALL_AUTHENTICATED_USERS" />
                </security-role>
            </application-bnd>
        </application>
        
        <basicRegistry id="basic" realm="BasicRealm">
            <user name="employee0" password="emp0pwd" />
            <user name="employee1" password="emp1pwd" />
            <user name="manager0" password="mgr0pwd" />
            <group name="employeeGroup">
                <member name="employee0" />
                <member name="employee1" />
            </group>
        </basicRegistry>   
  3. Konfigurieren Sie den Service-Provider, indem Sie die Web-Service-Endpunkte angeben.
    1. Erstellen Sie Web-Services.
      @WebService(serviceName = "SayHelloPojoService",
                  portName = "SayHelloPojoPort")
      public class SayHelloPojoService implements SayHelloService {
      	...
      }
      
      @WebService(serviceName = "SayHelloStatelessService",
                  portName = "SayHelloStatelessPort",
                  endpointInterface = "com.ibm.ws.jaxws.transport.server.security.SayHelloService")
      @Stateless(name = "SayHelloSessionBean")
      public class SayHelloStatelessService implements SayHelloLocal {
      	...
      }
    2. Konfigurieren Sie die ibm-ws-bnd.xml -Datei für den Service-Provider.
      <?xml version="1.0" encoding="UTF-8"?>
      <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
      		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      		xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" 
      		version="1.0">
      	<http-publishing>
      		<webservice-security> 
      			<security-constraint>
      				<web-resource-collection>
      					<web-resource-name>Only Managers</web-resource-name>
      					<url-pattern>/manager/*</url-pattern>
      					<http-method>GET</http-method>
      					<http-method>POST</http-method>
      				</web-resource-collection>
      				<auth-constraint id="AuthConstraint_manager">
      					<role-name>Manager</role-name>
      				</auth-constraint>
      			</security-constraint>
      			<security-constraint>
      				<web-resource-collection>
      					<web-resource-name>Employees</web-resource-name>
      					<url-pattern>/employee/*</url-pattern>
      					<http-method>GET</http-method>
      					<http-method>POST</http-method>
      				</web-resource-collection>
      				<auth-constraint id="AuthConstraint_employee">
      					<role-name>Employee</role-name>
      				</auth-constraint>
      			</security-constraint>
      			<!-- SECURITY ROLES -->
      			<security-role id="Staff">
      				<role-name>Employee</role-name>
      				<role-name>Manager</role-name>
      			</security-role>
      			<!-- AUTHENTICATION METHOD: Basic authentication -->
      			<login-config id="LoginConfig">
      				<auth-method>BASIC</auth-method>
      				<realm-name>Authentication</realm-name>
      			</login-config>                    
      		</webservice-security>
      	</http-publishing>
      </webservices-bnd>
      Hinweis:
      • Die Datei ibm-ws-bnd.xml muss sich im Verzeichnis /WEB-INF einer Webanwendung oder im Verzeichnis /META-INF einer EJB-basierten Web-Service-Anwendung (JAR-Archiv) befinden.
      • Das Element login-config in der Datei ibm-ws-bnd.xml ist nur in einer EJB-basierten Web-Service-Anwendung (JAR-Archiv) wirksam. Für Webanwendungen wird das Element login-config ignoriert und der Wert des entsprechenden Elements in der Datei web.xml verwendet.
  4. Konfigurieren Sie den Service-Client, indem Sie die Web-Service-Endpunkte angeben. Beispiel: Die Clientanwendung ist eine Webanwendung mit dem Namen TransportSecurityClient.war.
    1. Konfigurieren Sie die Clientanwendung in der Datei server.xml .
      <application id="TransportSecurityClient" name="TransportSecurityClient" 
      		location="TransportSecurityClient.war"
      		context-root="TransportSecurityClient" type="war" />
    2. Konfigurieren Sie die Datei ibm-ws-bnd.xml für die Clientanwendung.
      <?xml version="1.0" encoding="UTF-8"?>
      <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
      		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      		xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd"
      		version="1.0">
      	<!-- POJO service reference binding-->
      	<service-ref name="service/SayHelloPojoService">
      		<port name="SayHelloPojoPort" 
      				namespace="http://ibm.com/ws/jaxws/transport/security/"
      				username="employee1"
      				password="{xor}OjIvbi8oOw=="
      				/>
      	</service-ref>
      	<!-- Stateless service reference binding-->
      	<service-ref name="service/SayHelloStatelessService">
      		<port name="SayHelloStatelessPort" 
      				namespace="http://ibm.com/ws/jaxws/transport/security/"
      				username="employee1"
      				password="{xor}OjIvbi8oOw=="
      				/>
      	</service-ref>
      </webservices-bnd>
      Hinweis:
      • Die Datei ibm-ws-bnd.xml muss sich im Verzeichnis /WEB-INF der Clientwebanwendung befinden.
      • Die Werte der Attribute username und password müssen mit dem Benutzernamen und Kennwort des Elements basicRegistry in der Datei server.xml übereinstimmen. Das Kennwort kann mit dem Befehl securityUtility verschlüsselt werden.
    3. Generieren Sie die Client-Stubs über die WSDL-Position.
      @WebServiceClient(name = "SayHelloPojoService",
                        targetNamespace = "http://ibm.com/ws/jaxws/transport/security/",
                        wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/employPojoService?wsdl")
      public class SayHelloPojoService
                      extends Service
      {...}
      
      @WebServiceClient(name = "SayHelloStatelessService",
          targetNamespace = "http://ibm.com/ws/jaxws/transport/security/",
          wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/EmployStatelessService?wsdl")
      public class SayHelloStatelessService
                      extends Service
      {...}
    4. Verwenden Sie die Annotation @WebServiceRef , um den Web-Service in das Servlet einzufügen. Beispiel: TestJaxWsTransportSecurityServlet.
      @WebServiceRef(name = "service/SayHelloPojoService")
      SayHelloPojoService pojoService;
      
      @WebServiceRef(name = "service/SayHelloStatelessService")
      SayHelloStatelessService statelessService;