El presente documento tiene como objetivo explicar paso a paso la configuración para el uso del doble factor de autenticación por token TOTP (Contraseña de un solo uso basada en el tiempo) en WSO2 Identity Server.
1.- Configuración de claim del usuario
Para iniciar, un claim es un fragmento de información sobre el usuario, como pueden ser, nombre de usuario, correo electrónico, rol, localidad a la que pertenece, etc. Un claim proporciona una noción general y única para definir la información de identidad relacionada con el usuario.
Ahora se debe configurar un nuevo claim que se llamará Secret Key, con la siguiente información:
Parámetro | Valor |
Descripción |
Claim URI | http://wso2.org/claims/identity/secretkey | Este es el URI definido bajo el dialecto, específico del claim. Hay diferentes URI disponibles en Identity Server y estos equivalen a los atributos del usuario que se muestran en el perfil de los usuarios. Estos URI se asignan a los atributos en el almacén de usuarios subyacente. |
Display Name | Secret Key | Este es el nombre del claim que se muestra en la interfaz de usuario. |
Description | Claim to store the secret key | Esto le da la opción de describir la funcionalidad del claim. |
Mapped Attribute | stateOrProvinceName | Este es el nombre del atributo correspondiente del almacén de usuarios subyacente que se asigna al valor de URI de claim. |
Supported by Default | selected | Si no está marcada, este claim no se solicitará durante el registro del usuario. |
Con este paso el usuario tendrá la opción de generar una clave secreta con la cual se generará el QR de TOTP.
2.- Configuración de TOTP
Posteriormente se debe configurar el archivo application-authentication.xml que se encuentra en la ruta <IS_HOME>/repository/conf/identity/ en el que se agrega la configuración del autenticador TOTP, con la siguiente información.
Campo | Descripción |
usecase | Este campo puede tomar uno de los siguientes valores: local, asociación, userAttribute, subjectUri. Si no especifica ningún caso de uso, el valor predeterminado es local. |
encodingMethod | El método de codificación que se utiliza para generar el TOTP. |
authenticationMandatory | Si este valor es verdadero, la autenticación TOTP se aplicará como un segundo paso. |
timeStepSize | El tamaño del paso de tiempo, que se utiliza para validar el TOTP. |
windowSize | El tamaño de la ventana, que se utiliza para validar el TOTP. |
enrolUserInAuthenticationFlow | Si este valor es verdadero, le pedirá al usuario que habilite el autenticador TOTP en el flujo de autenticación. |
secondaryUserstore | La configuración del almacén de usuarios se mantiene por inquilino como valores separados por comas. Por ejemplo, <Parameter name= “secondaryUserstore “> jdbc, abc, xyz </Parameter>. |
TOTPAuthenticationEndpointURL | Este es el endpoint de la interfaz de usuario que se utiliza para recopilar el TOTP. |
TOTPAuthenticationEndpointErrorPage | Este es el endpoint de la página de error. |
TOTPAuthenticationEndpointEnableTOTPPage | Este es el endpoint de la página de inscripción de TOTPauthenticator. |
Issuer | Este es el nombre del emisor que se mostrará en la Aplicación móvil. Si no está configurado, se mostrará el dominio del inquilino. |
UseCommonIssuer | Si es verdadero, el nombre del emisor definido en application-authentication.xml se utilizará como emisor para todos los inquilinos. |
<AuthenticatorConfig name=”totp” enabled=”true”> <Parameter name=”encodingMethod”>Base32</Parameter> <Parameter name=”timeStepSize”>30</Parameter> <Parameter name=”windowSize”>3</Parameter> <Parameter name=”authenticationMandatory”>true</Parameter> <Parameter name=”enrolUserInAuthenticationFlow”>true</Parameter> <Parameter name=”usecase”>local</Parameter> <Parameter name=”secondaryUserstore”>primary</Parameter> <Parameter name=”TOTPAuthenticationEndpointURL”>https://localhost:9443/totpauthenticationendpoint/totp.jsp</Parameter> <Parameter name=”TOTPAuthenticationEndpointErrorPage”>https://localhost:9443/totpauthenticationendpoint/totpError.jsp</Parameter> <Parameter name=”TOTPAuthenticationEndpointEnableTOTPPage”>https://localhost:9443/totpauthenticationendpoint/enableTOTP.jsp</Parameter> <Parameter name=”redirectToMultiOptionPageOnFailure”>false</Parameter> <Parameter name=”Issuer”>WSO2</Parameter> <Parameter name=”UseCommonIssuer”>true</Parameter> </AuthenticatorConfig>
2.1.- Configuración de TOTP por medio de email
Para iniciar este paso se debe editar el archivo axis2.xml que se encuentra en la ruta <IS_HOME>/repository/conf/axis2/ para enviar una notificación por correo electrónico.
Se debe habilitar el parámetro <transportSender name=”mailto”> agregando la siguiente configuración:
<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender"> <parameter name="mail.smtp.from">{email}@gmail.com</parameter> <parameter name="mail.smtp.user">{username}</parameter> <parameter name="mail.smtp.password">{password}</parameter> <parameter name="mail.smtp.host">smtp.gmail.com</parameter> <parameter name="mail.smtp.port">587</parameter> <parameter name="mail.smtp.starttls.enable">true</parameter> <parameter name="mail.smtp.auth">true</parameter> </transportSender>
Posteriormente se debe reemplazar las credenciales de correo electrónico del remitente (USER_NAME, PASSWORD y SENDER’S_MAIL) en la configuración.
Se debe agregar la plantilla de correo electrónico que debe enviarse al usuario cuando genere el token en el archivo email-admin-config.xml que se encuentra en la ruta <IS_HOME>/repository/conf/email/ de la siguiente manera.
<configuration type="totp" display="TOTP" locale="en_US"> <targetEpr></targetEpr> <subject>WSO2 Carbon - Time-Based One Time Password</subject> <body> Hi {{ user.claim.givenname}}, Please use the token {totp-token} as the password for your login. </body> <footer> Best Regards, WSO2 Identity Server Team http://www.wso2.com </footer> <redirectPath></redirectPath> </configuration>
2.2.- Configurar Service Provider.
2.2.1.- Desplegar travelocity.com2.2.- Configurar Service Provider
En este ejemplo se configurará el service provider con la aplicación de travelocity.com , para ello se debe primero generar el archivo archivo WAR.
Para ello se debe ejecutar los siguientes comandos:
mkdir is-samples cd is-samples/ git init git remote add -f origin https://github.com/wso2/product-is.git git config core.sparseCheckout true
Posteriormente se debe seleccionar la versión del proyecto con el siguiente comando:
git checkout -b v5.4.0 v5.4.0
Ahora se debe realizar el deploy en Apache Tomcat Server, para esto se debe copiar el archivo .war en la carpeta webapps. Por ejemplo:
<TOMCAT_HOME>/apache-tomcat-<version>/webapps.
Posteriormente a los pasos anteriores, se debe configurar o agregar un nuevo service provider para la aplicación de travelocity.com.
2.2.2.- Configuración del Service Provider
En la consola de administración de WSO2 Identity Server en la sección de Service Providers (SP) en la pestaña Main en el menú principal, se debe dar clic en la opción Add. Con esta acción se podrá iniciar con el proceso de configuración de un SP.
Una vez estando en el formulario de la creación de un nuevo SP, el cual la página fue redirigida por la acción anterior, Se pedirá el nombre del nuevo SP y su descripción el cual para esta prueba será travelocity.com.
Posteriormente se debe hacer clic en el botón de Register el cual nos llevará a otro formulario donde se completará la configuración del nuevo SP.
Una vez estando en el nuevo formulario se pedirá la siguiente información.
- Application Certificate: Certificado generado por WSO2 del archivo wso2carbon.jks en formato del archivo wso2carbon.pem.
- Claim Configuration: Se agrega la configuración para las propiedades de email (http://wso2.org/claims/emailaddress) y nombre (http://wso2.org/claims/username).
- Inbound Authentication Configuration: Se debe dar clic en Configure en la pestaña de SAML2 Web SSO Configuration, si se requiere otro tipo de configuración para el SP con SSO se puede consultar la documentación de WSO2 Identity Server.
Parámetro | Valor |
Issuer | travelocity.com |
Assertion Consumer URL | http://localhost:8080/travelocity.com/home.jsp |
Enable Response Signing | Selected |
Enable Single Logout | Selected |
Enable Attribute Profile | Selected |
Include Attributes in the Response Always | Selected |
Posteriormente se debe hacer clic en Update para guardar los cambios, donde se redirigirá a la página de Service Provider.
Para el siguiente paso se debe ingresar a la pestaña de Local and Outbound Authentication Configuration, y en el parámetro de authentication type se debe dar clic en advanced configuration.
Con el paso anterior se redirigirá a una nueva página donde se configurarán los pasos para la autenticación, para esta prueba serán Basic (user/password) y TOTP (Token).
Posteriormente se debe hacer clic en update para finalizar el proceso de doble factor de autenticación.
3.- Pruebas
Para probar la configuración realizada anteriormente, se debe ingresar a la url del portal de travelocity, la cual es http://<TOMCAT_HOST>:<TOMCAT_PORT>/travelocity.com/index.jsp.
Se debe hacer clic en la opción de acuerdo con la configuración que se realizó, en este caso será SAML.
En la siguiente ventana se mostrará un formulario donde se solicitará el usuario y contraseña.
Posteriormente, si las credenciales son correctas se mostrará la opción de generar el QR, el cual al escanearlo con Google Authenticator o Microsoft Authenticator.
Una vez hecho el paso anterior se redirige a la página de autenticación TOTP. En el cual se debe ingresar el código de verificación que se muestra en el Google Authenticator o Windows Authenticator para autenticarse. Alternativamente, puede generar el código de verificación haciendo clic en “Get a Verification Code“” y usar el código que se envía a su dirección de correo electrónico para hacer la doble autenticación.
4.- Refrescando la clave secreta
Se puede actualizar la clave secreta seleccionando la casilla Refresh Secret Key en el dashboard. Sin embargo, debe volver a escanear el código QR para sincronizar la nueva clave secreta con su aplicación móvil Google Authenticator o Windows Authenticator.