Autenticación de clientes de servicios web con UsernameToken (señal de nombre de usuario)
WebSphere Application Server Liberty soporta la especificación OASIS Web Services Security UsernameToken Profile 1.1. La especificación describe cómo proporciona un cliente de servicios web una UsernameToken como medio para identificar al solicitante utilizando un nombre de usuario y, de manera opcional, utilizando una contraseña o un equivalente a contraseña con el proveedor de servicios web. El entorno de ejecución de seguridad de servicios Web (WS-Security) de Liberty que procesa la política del proveedor de servicios web puede utilizar esta información de identificación para autenticar al usuario.
El requisito de UsernameToken se expresa como una de las señales de soporte en la política WS-Security. Puede añadir un requisito de UsernameToken como una señal necesaria en una de las aserciones de señal de soporte, por ejemplo, SupportingTokens, SignedSupportingTokens, SignedEndorsingSupportingTokens, SignedEncryptedSupportingTokens y EncryptedSupportingTokens.
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
Además del requisito de proporcionar un nombre de usuario o una contraseña, puede configurar una política para incluir una indicación de fecha y hora nonce y created en una UsernameToken.
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
<sp13:Created />
<sp13:Nonce />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
<sp:HashPassword />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
Para obtener más información sobre nonce, created y distintos tipos de contraseña, consulte la especificación OASIS WS-Security policy 1.3.
Suministro de nombre de usuario y contraseña en un cliente de servicios web
La característica WS-Security de Liberty proporciona más de un método para indicar el nombre de usuario y la contraseña de una aplicación cliente al generar una UsernameToken. Puede establecer el nombre de usuario y la contraseña mediante programación o en el archivo server.xml.
Un cliente puede generar una UsernameToken con el nombre de usuario y contraseña proporcionados en el archivo server.xml. El nombre de usuario y la contraseña que se encuentran en el archivo server.xml se consideran la configuración predeterminada y lo que se proporciona en el RequestContext de la invocación de servicio web del cliente lo altera temporalmente.
<wsSecurityClient id="default"
ws-security.username="alice"
ws-security.callback-handler="com.acme.PasswordCallback"
</wsSecurityClient>
- ws-security.username: nombre de usuario
- ws-security.password: contraseña de usuario si no se ha definido ws-security.callback-handler
- ws-security.callback-handler: la clase de implementación CallbackHandler utilizada para obtener las contraseñas
Mapa<Serie, Objeto> requestCtx = ((BindingProvider)port).getRequestContext();
requestCtx.put("ws-security.username", "bob_username");
requestCtx.put("ws-security.password", "bob_password");
Consumo de una UsernameToken en un proveedor de servicios web
Cuando se recibe una UsernameToken, WS-Security utiliza automáticamente el registro de usuarios de seguridad de Liberty para validar el nombre de usuario y la contraseña, si la contraseña es necesaria. Si el tipo de contraseña en UsernameToken es PasswordDigest, o utiliza claves derivadas, debe proporcionar la implementación ws-security.callback-handler de un manejador de devolución de llamada de contraseña configurándolo en el archivo server.xml. Este manejador de devolución de llamada debe devolver contraseñas válidas para todos los nombres de usuario esperados para que el módulo ejecutable de WS-Security pueda calcular los valores de resumen para la comparación con el valor del mensaje SOAP. Después de que la comparación del valor de resumen se completa satisfactoriamente, se validan el nombre de usuario y la contraseña con el registro de usuarios.
<wsSecurityProvider id="default"
ws-security.callback-handler="com.acme.PasswordCallback"
</wsSecurityProvider>
CallbackHandler de contraseña
WS-Security utiliza el CallbackHandler de contraseña para recuperar una contraseña de usuario. En Liberty, esta clase CallbackHandler de contraseña se debe empaquetar como una característica de Liberty. Para obtener más información sobre el CallbackHandler de contraseña, consulte Desarrollo de un manejador de devolución de llamada de contraseña para WS-Security.
Para obtener más información sobre requisitos y limitaciones de una implementación de manejador de devolución de llamada, consulte la sección CallbackHandler de contraseña de clave privada de Protección de servicios web con una señal X.509.
Protección de UsernameToken en mensajes SOAP
<UsernameToken>
<Username>myusername</Username>
<Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
mypassword
</Password>
</UsernameToken>
Si desea enviar un UsernameToken con PasswordText, debe tener en cuenta protecciones adicionales en el mensaje como, por ejemplo, utilizar HTTPS o cifrar la señal utilizando la aserción de política EncryptedSupportingToken. Si desea más información sobre el uso necesario del transporte HTTPS en la política, consulte Liberty: Aserciones de política de transporte HTTPS de seguridad de servicios web.
Derivación de clave de UsernameToken
Como se indica en la especificación Web Services Security UsernameToken Profile 1.1:
La contraseña asociada a un nombre de usuario se puede utilizar para derivar una clave secreta compartida para fines de protección de integridad o confidencialidad del contenido de los mensajes.
Se debe tener en cuenta que las contraseñas están en peligro de varios tipos de ataque, que a su vez provocan la exposición de las claves derivadas. Este procedimiento de derivación de clave pretende minimizar el riesgo de ataques en las claves, hasta el punto en que sea posible, pero está finalmente limitado por la inseguridad de una contraseña que un usuario puede recordar y escribir en un teclado estándar.
Son necesarios dos elementos adicionales para habilitar la derivación de una clave de una contraseña. Son <wsse11:Salt> y <wsse11:Iteration>. Estos valores no son secretos y se deben transmitir en la señal Username cuando se utiliza la derivación de clave. Cuando se utiliza derivación de clave no se debe incluir la contraseña en la señal de nombre de usuario. El receptor utilizará su conocimiento de la contraseña para derivar la misma clave que el remitente.
Si una UsernameToken utiliza derivación de clave, para una aplicación de proveedor, debe proporcionar la implementación ws-security.callback-handler de un manejador de devolución de llamada de contraseña configurándolo en el archivo server.xml.
<sp:SymmetricBinding>
<wsp:Policy>
<sp:ProtectionToken>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10 />
<sp:RequireDerivedKeys />
</wsp:Policy>
</sp:UsernameToken>
<wsp:Policy>
</sp:ProtectionToken>
</wsp:Policy>
</sp:SymmetricBinding>
<wsse:UsernameToken wsse:Id="...">
<wsse:Username>...</wsse:Username>
<wsse11:Salt>...</wsse11:Salt>
<wsse11:Iteration>...</wsse11:Iteration>
</wsse:UsernameToken>