Cómo empezar: Configuración de un proveedor y cliente OpenID Connect en Liberty

Este ejemplo completo le ayuda a familiarizarse con la configuración de OpenID Connect (OIDC) en Liberty dado que le muestra desde la instalación de Liberty hasta la configuración de OpenID Connect. El resultado es que las aplicaciones cliente pueden verificar la identidad de un usuario basándose en la autenticación de un proveedor de OpenId Connect.

Acerca de esta tarea

Puede configurar un proveedor de OpenId Connect y OpenID Connect Relying Party realizando estos pasos en el procedimiento siguiente:
  1. Instale Liberty.
  2. Cree dos servidores.
  3. Descargue e instale una aplicación de prueba proporcionada por IBM® que incluya el servlet Snoop.
  4. Configure proveedor de OpenId Connect y OpenID Connect Relying Party para que se comuniquen entre sí utilizando el nombre de host localhost.
  5. Inicie la sesión.
  6. Edite las configuraciones de proveedor de OpenId Connect y OpenID Connect Relying Party para utilizar el nombre de host real.
  7. Inicie la sesión.
Los puntos siguientes explican qué está ocurriendo en el procedimiento:
  • El servidor de OpenID Connect Relying Party y el servidor de proveedor de OpenId Connect se ejecutan en el mismo sistema.
  • El servidor de OpenID Connect Relying Party y el servidor de proveedor de OpenId Connect se inician con el nombre de host localhost. Lo hacen para superar los problemas que el sistema pueda tener con un host que permite conexiones externas en sí mismo.
  • Se codifica un registro basado en archivos en el archivo server.xml para el servidor de proveedor de OpenId Connect. Contiene dos entradas para el nombre de usuario y la contraseña. Una es para el nombre de usuario Jackson y la contraseña Password. La otra es para el nombre de usuario Andrea y la contraseña Password. En un entorno de producción, en lugar de ello puede utilizar, por ejemplo, el registro de usuarios LDAP dado que los usuarios se autentican en un proveedor de OpenId Connect. Se necesita un proveedor de OpenId Connect para tener un registro. OpenID Connect Relying Party no necesita un registro porque confía los artefactos de usuario, por ejemplo señales, que obtiene del proveedor de OpenId Connect.
  • Los almacenes de claves predeterminados utilizan contraseñas de texto sin formato. Puede generar una contraseña codificada y cifrada utilizando el securityUtility.
  • Para simplificar, se utiliza el algoritmo de firma HS256. El soporte para el algoritmo de firma HS256 no es obligatorio en la especificación de OpenID Connect. Muchos proveedores de OpenID no soportan el algoritmo de firma HS256.
  • Ponga la aplicación de prueba en el directorio dropins por conveniencia, pero evite esta práctica en un entorno de producción.
  • El rastreo de OIDC está habilitado para que pueda ver el archivo trace.log del servidor si encuentra errores.

Procedimiento

  1. Instale WebSphere Liberty.
    1. Descargue el archivo .zip de WebSphere Liberty de WASdev en un nuevo directorio para la instalación.
    2. Extraiga el archivo descargado.
      unzip wlp-webProfile7-17.0.0.4.zip

      Las vías de acceso que siguen en este ejemplo son relativas al directorio que ha creado para la instalación.

  2. Descargue la aplicación predeterminada Liberty de ejemplo.

    Esta aplicación predeterminada está en el archivo libertyDefaultApplication.ear y contiene el servlet Snoop que se utiliza en este procedimiento de ejemplo.

  3. Instale las características de cliente Liberty OpenID Connect y proveedor Liberty OpenID Connect.
    Ejecute los mandatos siguientes desde el directorio wlp/bin:
    installUtility install openidConnectClient-1.0
    installUtility install openidConnectServer-1.0
  4. Cree los servidores de Liberty.
    1. Cree el servidor de OpenID Connect Relying Party.
      Ejecute el mandato siguiente desde el directorio wlp/bin:
      server create Liberty_RP
    2. Cree el servidor de proveedor de OpenId Connect.
      Ejecute el mandato siguiente desde el directorio wlp/bin:
      server create Liberty_OP
  5. Cree el archivo server.xml para el servidor de OpenID Connect Relying Party.
    1. Vaya al directorio wlp/usr/servers/Liberty_RP.
    2. Sustituya el contenido del archivo server.xml con el contenido siguiente:
      <server description="Liberty_RP">
          <featureManager>
              <feature>openidConnectClient-1.0</feature>
              <feature>appSecurity-2.0</feature>
          </featureManager>
          <!-- Para acceder a este servidor desde cualquier lugar distinto de localhost o de la dirección de bucle de retorno, añada un atributo de host al elemento siguiente, p.ej. host="*" -->
          <httpEndpoint httpPort="9081" httpsPort="9444" id="defaultHttpEndpoint"/>
          <keyStore id="defaultKeyStore" password="Password"></keyStore>
          <openidConnectClient id="RP"
              clientId="oidcclient"
              clientSecret="password"
              authorizationEndpointUrl="https://localhost:9443/oidc/endpoint/OP/authorize"
              tokenEndpointUrl="https://localhost:9443/oidc/endpoint/OP/token" >
          </openidConnectClient>
          <logging  traceSpecification="*=info:
      com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.cli.e.nt.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
      </server>
  6. Cree el archivo server.xml para el proveedor de OpenId Connect.
    1. Cambie al directorio wlp/usr/servers/Liberty_OP.
    2. Sustituya el contenido del archivo server.xml con el contenido siguiente:
      <server description="Liberty_OP">
          <featureManager>
              <feature>openidConnectServer-1.0</feature>
              <feature>appSecurity-2.0</feature>
          </featureManager>
          <!-- Para acceder a este servidor desde cualquier lugar distinto de localhost o de la dirección de bucle de retorno, añada un atributo de host al elemento siguiente, p.ej. host="*" -->
          <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
          <keyStore id="defaultKeyStore" password="Password"/>
          <basicRegistry>
              <user name="Jackson" password="Password"/>
              <user name="Andrea" password="Password"/>
          </basicRegistry>
          <openidConnectProvider id="OP" oauthProviderRef="oauth"/>
          <oauthProvider id="oauth">
              <localStore>
                  <!-- El patrón de URL de redirección predeterminado es: https://<nombrehost>:<puertossl>/oidcclient/redirect/<openidConnectClientID> -->
                  <client name="oidcclient"  secret="password" scope="openid" redirect="https://localhost:9444/oidcclient/redirect/RP" />
              </localStore>
          </oauthProvider>
          <!-- Para otorgar a todos los usuarios autenticados acceso al recurso protegido de OIDC, otórgueles el rol oauth autenticado -->
          <oauth-roles>
              <authenticated>
                  <special-subject type="ALL_AUTHENTICATED_USERS"/>
              </authenticated>
          </oauth-roles>
          <logging  traceSpecification="*=info:
      com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.client.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
      </server>
  7. Cree las claves y los almacenes de claves predeterminados.
    Ejecute los mandatos siguientes desde el directorio wlp/bin:
    server start Liberty_RP
    server stop Liberty_RP
    server start Liberty_OP
    server stop Liberty_OP
  8. Añada el certificado de firmante para el servidor Liberty_OP al servidor Liberty_RP como un certificado de confianza.
    1. Exporte el certificado personal del almacén de claves del servidor Liberty_OP.
      1. Cambie al directorio wlp/usr/servers/Liberty_OP/resources/security.
      2. Exporte el certificado personal predeterminado del servidor Liberty_OP:
        keytool -exportcert -keystore key.jks -storepass Password -alias default -file libertyOP.cer
        Este certificado personal predeterminado del servidor Liberty_OP es un certificado de firmante.
    2. Importe el certificado de firmante del servidor Liberty_OP en el almacén de claves del servidor Liberty_RP.
      1. Copie el archivo libertyOP.cer en el directorio wlp/usr/servers/Liberty_RP/resources/security.
      2. Cambie al directorio wlp/usr/servers/Liberty_RP/resources/security.
      3. Ejecute el mandato siguiente para realizar la importación:
        keytool -importcert -keystore key.jks -storepass Password -alias libertyop -file libertyOP.cer -noprompt
    3. Opcional: Vea el almacén de claves del servidor Liberty_RP:
      keytool -list -v -keystore key.jks -storepass Password
  9. Instale la aplicación predeterminada de Liberty en el servidor Liberty_RP.

    Copie el archivo libertyDefaultApplication.ear que ha descargado en un paso anterior en el directorio wlp/usr/servers/Liberty_RP/dropins.

  10. Inicie el servidor Liberty_OP y el servidor Liberty_RP.
    Ejecute los mandatos siguientes desde el directorio wlp/bin:
    server start Liberty_RP
    server start Liberty_OP
  11. Abra la página de inicio de sesión del servidor Liberty_RP.
    1. En la barra de direcciones del navegador, especifique el URL del servidor Liberty_RP:
      http://localhost:9081/snoop
    2. Pulse Intro.

      Se visualiza una ventana de inicio de sesión.

      Importante: Si obtiene un aviso de navegador que indica que la conexión no es segura, realice los pasos en el navegador para permitir la conexión.
  12. Inicie la sesión en el servidor Liberty_OP y autorice el servidor Liberty_RP.
    1. Autentique el usuario en el servidor Liberty_OP.
      1. Inicie la sesión con Jackson como nombre de usuario y Password como contraseña.
      2. Puse Inicio de sesión.

        La página Permitir que el cliente acceda a los datos siguientes se visualiza con la entrada openid seleccionada.

    2. Autorice el servidor Liberty_OP para permitir que el servidor Liberty_RP acceda a la información personal del usuario.

      Pulse Permitir una vez o Permitir, recordar mi decisión.

      Importante: Si obtiene un aviso de navegador que indica que la conexión no es segura, realice los pasos en el navegador para permitir la conexión. Puede que reciba este aviso porque los almacenes de claves utilizados por el elemento httpEndpoint en el servidor Liberty_RP y el servidor Liberty_OP contienen sólo certificados autofirmados.
    Si inicia la sesión correctamente, el servlet Snoop se muestra en la página Snoop Servlet - Request/Client Information.
    Importante: Para iniciar la sesión de nuevo, complete al menos una de las siguientes opciones:
    • Inicie la sesión desde un producto de navegador diferente.
    • Borre las cookies en el navegador actual y siga los pasos anteriores relacionados con el inicio de sesión.
    • Cierre todas las ventanas del navegador que ha utilizado para iniciar la sesión, vuelva a abrir el navegador e inicie la sesión.
    • Reinicie el servidor Liberty_RP y, a continuación, siga los pasos anteriores relacionados con el inicio de sesión.
  13. Califique por completo los nombres de servidor.
    1. Cambie el nombre de host localhost en el archivo server.xml del servidor Liberty_RP a su nombre completo.
      1. Edite el archivo wlp/usr/servers/Liberty_RP/server.xml.
      2. Añada el atributo siguiente al elemento httpEndpoint: host="*".
      3. Cambie los atributos authorizationEndpointUrl y tokenEndpointUrl del elemento openidConnectClient para utilizar el nombre de host de servidor del nombre de host localhost.

        El código de ejemplo siguiente especifica el nombre de host de servidor completo:

        <openidConnectClient id="RP"
            clientId="oidcclient"
            clientSecret="password"
            authorizationEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/authorize"
            tokenEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/token" >
        </openidConnectClient>
      4. Guarde el archivo.

        Cuando guarde el archivo, se desencadenará un cambio de configuración de Liberty para que no tenga que reiniciar el servidor.

    2. Cambie el nombre de host localhost en el archivo server.xml del servidor Liberty_OP a su nombre completo.
      1. Edite el archivo wlp/usr/servers/Liberty_OP/server.xml.
      2. Añada el atributo siguiente al elemento httpEndpoint: host="*".
      3. Cambie el atributo de redirección del elemento del cliente (oauthProvider/localStore/client) para utilizar el nombre de host de servidor completo en lugar del nombre de host localhost.
        El código de ejemplo siguiente especifica el nombre de host de servidor completo:
        <client name="oidcclient" secret="password" scope="openid" redirect="https://wks1.acme.com:9444/oidcclient/redirect/RP" />
      4. Guarde el archivo.

        Cuando guarde el archivo, se desencadenará un cambio de configuración de Liberty para que no tenga que reiniciar el servidor.

  14. Abra la página de inicio de sesión utilizando el nombre de host completo.
    1. En la barra de direcciones de un navegador, especifique el URL que incluye el servidor Liberty_RP:
      http://<nombre_host>:9081/snoop
    2. Pulse Intro.

      Se visualiza una ventana de inicio de sesión.

      Importante: Si obtiene un aviso de navegador que indica que la conexión no es segura, realice los pasos en el navegador para permitir la conexión.
  15. Inicie la sesión en el servidor Liberty_OP y autorice el servidor Liberty_RP.
    1. Autentique el usuario en el servidor Liberty_OP.
      1. Inicie la sesión con Jackson como nombre de usuario y Password como contraseña.
      2. Puse Inicio de sesión.

        La página Permitir que el cliente acceda a los datos siguientes se visualiza con la entrada openid seleccionada.

    2. Autorice el servidor Liberty_OP para permitir que el servidor Liberty_RP acceda a la información personal del usuario.

      Pulse Permitir una vez o Permitir, recordar mi decisión.

      Importante: Si obtiene un aviso de navegador que indica que la conexión no es segura, realice los pasos en el navegador para permitir la conexión. Puede que reciba este aviso porque los almacenes de claves utilizados por el elemento httpEndpoint en el servidor Liberty_RP y el servidor Liberty_OP contienen sólo certificados autofirmados.
    Si inicia la sesión correctamente, el servlet Snoop se muestra en la página Snoop Servlet - Request/Client Information.

Resultados

Tiene un servidor de Liberty que contiene el servlet Snoop que está protegido por un OpenID Connect Relying Party. OpenID Connect Relying Party utiliza el proveedor de OpenId Connect para la autenticación.

Tabla 1. Pregunta sobre los resultados
Pregunta Respuesta
¿Por qué está la aplicación de prueba protegida por OpenID Connect Relying Party aunque el servlet Snoop y la aplicación de prueba libertyDefaultApplication no se mencionan en la configuración de OpenID Connect? La aplicación de prueba se ha protegido porque el archivo web.xml contiene una restricción de seguridad que cualquier contenedor habilitado para la seguridad de Java™ EE soporta. Cuando OpenID Connect Relying Party se ejecuta en Liberty, de forma predeterminada Relying Party intenta autorizar todas las solicitudes a cualquier URL que tiene restricciones de seguridad. Dado que la aplicación de prueba tiene restricciones de seguridad en el URL que se está utilizando, Relying Party autoriza las solicitudes.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_config_oidc_pc_examp_beginner.html