Accede al Manual de Apoyo
Transcripción
Accede al Manual de Apoyo
Manual de Apoyo WSO2 Webinar - WSO2IS Autenticación Federada WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada CONTROL DE EDICIONES Edición Cambios Fecha 1.0 Versión inicial 28/04/2016 Destinatarios Fecha LISTA DE DISTRIBUCIÓN Organización Chakray Chakray - Gustavo Vazquez Amado 28/04/2016 Versión 1.0 Pág 2/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada CONTENIDO INTRODUCCIÓN CONFIGURACIÓN DE SSO PARA CONSOLAS DE ADMINISTRACIÓN WSO2 Fichero carbon.xml Fichero identity.xml Fichero authenticators.xml INTEGRACIÓN DE SSO EN APLICACIONES WEB Añadido del Agente SSO a una aplicación WEB Añadido del repositorio WSO2 Añadido de dependencia org.wso2.carbon.identity.sso.agent Añadido del filtro SSO a la aplicación web Añadido de la inicialización del Agente SSO Añadido de la propiedades de inicialización del Agente SSO Test de integración Añadido del Agente SSO preconfigurado Tomcat CREACIÓN DE PROVEEDORES DE SERVICIO EN WSO2-IS Proveedor de Servicio carbonServer Proveedor de Servicio avis.com Proveedor de Servicio travelocity.com VERIFICACIÓN DE SSO IMPLEMENTACIÓN DE AUTENTICACIÓN FEDERADA Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 3/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Configuración en WSO2 Creación del Identity Provider Creación del Service Provider Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 4/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada 1. INTRODUCCIÓN Single Sign On es una mecanismo que permite que un usuario acceda a un conjunto de aplicaciones diferentes con un único login. El procedimiento se basa en disponer de un login centralizado en el servidor de credenciales y luego construir un paquete de autenticación que es enviado a cada aplicación para que esta permita el acceso al usuario. Existe un estándar para el intercambio de esta información de autenticación denominado Security Assertion Markup Language (SAML) actualmente en version 2. El estándar se comporta según la siguiente diagrama BROWSER WSO2 - IS WSO2 - AS 1. El usuario intenta acceder a una aplicación que posee un agente SAML a través de un navegador Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 5/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada 2. El browser realiza la petición a la aplicación 3. La aplicación responde con una petición SAML con datos del usuario y redirige el navegador al proveedor de identidades 4. El navegador redirige al IDP 5. El proveedor de identidades autentica al usuario por medios locales o federados y responde con un assertion SAML y redirige el navegador a la aplicación 6. El navegador redirige nuevamente a la aplicación con la respuesta SAML si la respuesta es correcta el usuario ya se encuentra logueado. Es posible configurar el producto WSO2IS para que se comporte como un servidor de Single Sign On definiendo en él diferentes proveedores que soportan SAML. De este modo todas las aplicaciones que soporten este estándar y tengan establecida la configuración del proveedor definido quedarán dentro del dominio SSO del WSO2IS y podrán accederse con un único login. A continuación se describe la configuración de SAML2. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 6/32 WSO2 Webinar 2. WSO2 Webinar - WSO2IS Autenticación Federada CONFIGURACIÓN DE SSO PARA CONSOLAS DE ADMINISTRACIÓN WSO2 A continuación se detalla el procedimiento para la configuración de la aplicación de administración de WSO2 en SSO en la plataforma, si no se desea integrar la consola de administración es posible pasar directamente al próximo capítulo: 2.1. Fichero carbon.xml Este fichero se encuentra en WSO2IS-HOME/repository/conf/ en él se definirán los nombres de host y consola para que no apunten al valor por defecto localhost. <HostName>idp.chakray.com</HostName> <MgtHostName>idp.chakray.com</MgtHostName> 2.2. Fichero identity.xml En este fichero se configura la url del servicio sso IdentityProviderURL, ya que por defecto redirecciona a https://idp.chakray.com:9443/samlsso y lógicamente esta URL no está accesible desde otros servidores. <SSOService> <IdentityProviderURL>https://idp.chakray.com:9443/samlsso</IdentityProvider URL> El resto de los valores de esta sección del fichero pueden permanecer por defecto. 2.3. Fichero authenticators.xml Este fichero se encuentra en WSO2IS-HOME/repository/conf/security/ y permite que la consola de administración pertenezca al dominio SSO del tenant. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 7/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Para esto debe habilitarse el authenticator denominado SAML2SSOAuthenticator y definir la URL del sevicio SSO denominada IdentityProviderSSOServiceURL con los siguientes datos. <Authenticator name="SAML2SSOAuthenticator" disabled="false"> <Priority>0</Priority> <Config> <Parameter name="LoginPage">/carbon/admin/login.jsp</Parameter> <Parameter name="ServiceProviderID">carbonServer</Parameter> <Parameter name="IdentityProviderSSOServiceURL">https://idp.chakray.com:9443/samlsso</ Parameter> <Parameter name="NameIDPolicyFormat">urn:oasis:names:tc:SAML:1.1:nameidformat:unspecified</Parameter> El resto de los valores puede quedar por defecto. Para que funcione es necesario crear un provider carbonServer con la configuración que se detalla a continuación. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 8/32 WSO2 Webinar 3. WSO2 Webinar - WSO2IS Autenticación Federada INTEGRACIÓN DE SSO EN APLICACIONES WEB Para que las aplicaciones web empresariales soporten SAML es necesario el añadido de un filtro, WSO2 provee el filtro SSO en el paquete SSO Agent. A continuación se detallan los pasos para la integración de las aplicaciones: 3.1. Añadido del Agente SSO a una aplicación WEB 3.1.1. Añadido del repositorio WSO2 Una vez creada la aplicación maven es necesario añadir el repositorio WSO2 <repositories> <repository> <id>wso2-nexus</id> <name>WSO2 internal Repository</name> <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </releases> </repository> </repositories> Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 9/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada 3.1.2. Añadido de dependencia org.wso2.carbon.identity.sso.agent <dependency> <groupId>org.wso2.carbon</groupId> <artifactId>org.wso2.carbon.identity.sso.agent</artifactId> <version>1.2.0</version> </dependency> 3.1.3. Añadido del filtro SSO a la aplicación web Se añade como filtro en el fichero web.xml <filter> <filter-name>SSOFilter</filter-name> <filter-class>org.wso2.carbon.identity.sso.agent.SSOAgentFilter</filter-class> </filter> <filter-mapping> <filter-name>SSOFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 3.1.4. Añadido de la inicialización del Agente SSO Se realiza en cualquier componente que se active al arranque de la aplicación, en este caso nos decantamos por implementar la interface ServletContextEventLIstener, esto ademas nos da la posibilidad de acceder al contexto del Servlet Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 10/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada public void contextInitialized(ServletContextEvent servletContextEvent) { Properties properties = new Properties(); try { if(servletContextEvent.getServletContext().getContextPath().contains("travelocity.com")) { properties.load(servletContextEvent.getServletContext().getClassLoader().getResourceAsStr eam("travelocity.properties")); } else if(servletContextEvent.getServletContext().getContextPath().contains("avis.com")) { properties.load(servletContextEvent.getServletContext().getClassLoader().getResourceAsStr eam("avis.properties")); } SSOAgentConfigs.initConfig(properties); } catch (IOException e){ LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (SSOAgentException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } SSOAgentConfigs.setKeyStoreStream(servletContextEvent.getServletContext().getClassLoad er().getResourceAsStream("wso2carbon.jks")); } 3.1.5. Añadido de la propiedades de inicialización del Agente SSO EnableSAMLSSOLogin=true EnableOpenIDLogin=true EnableSAML2Grant=false #This is the URL of the page that is used to choose the login scheme #such as SAML SSO or OpenID. This Url will not be processed by the #SSOAgentFilter LoginUrl=index.jsp Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 11/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada #Url to do send SAMLSSO AuthnRequest SAMLSSOUrl=samlsso #Url to do send SAML2 Grant OAuth2 Request SAML2GrantUrl=token #Url to send OpenID Authentication Request OpenIDUrl=openid #A unique identifier for this SAML 2.0 Service Provider application SAML.IssuerID=travelocity.com #The URL of the SAML 2.0 Assertion Consumer SAML.ConsumerUrl=https://localhost:9443/travelocity.com/home.jsp #The URL of the SAML 2.0 Identity Provider SAML.IdPUrl=https://localhost:9444/samlsso #This is the attribute name under which the authenticated session information #of SAML SSO and OpenID are stored SSOAgentSessionBeanName=SSOAgentSessionBean #Identifier given for the Service Provider for SAML 2.0 attributes #exchange SAML.AttributeConsumingServiceIndex=2100534310 #Specify if SingleLogout is enabled/disabled SAML.EnableSLO=true #This is the URL that is used for SLO SAML.LogoutUrl=logout #Specify if SAMLResponse element is signed SAML.EnableResponseSigning=true #Specify if SAMLAssertion element is signed SAML.EnableAssertionSigning=true #Specify if SAMLAssertion element is encrypted SAML.EnableAssertionEncryption=false Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 12/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada #Specify if AuthnRequests and LogoutRequests should be signed SAML.EnableRequestSigning=true #Specify if force authentication enabled SAML.EnableForceAuthentication=false #Custom credentials class SAML.SSOAgentCredentialImplClass=org.wso2.carbon.identity.sso.agent.saml.SSOAgentKe yStoreCredential #KeyStore to cryptographic credentials #SAML.KeyStore=/home/johann/Desktop/wso2is4.1.0/repository/resources/security/wso2carbon.jks KeyStore=/WEBINAR/wso2as-5.3.0/repository/resources/security/wso2carbon.jks #Password of the KeyStore SAML.KeyStorePassword=wso2carbon #Alias of the IdP's public certificate SAML.IdPCertAlias=wso2carbon #Alias of the SP's private key SAML.PrivateKeyAlias=wso2carbon 3.1.6. Test de integración Para testear la aplicación se utilizarán dos aplicaciones similares denominadas traveocity.com y avis.com 3.2. Añadido del Agente SSO preconfigurado Tomcat Existe un Agente SSO preconfigurado que puede descargarse de: http://svn.wso2.org/repos/wso2/carbon/platform/branches/turing/components/identity/org.wso2.c arbon.identity.sso.saml.tomcat.agent/ Una vez añadido el jar a la aplicación web es posible realizar toda la configuración en el web.xml sin tener que añadir servlets o ficheros de propiedades: Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 13/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada <filter> <filter-name>AuthFilter</filter-name> <filterclass>org.wso2.carbon.identity.sso.saml.tomcat.agent.SSOAgentFilter</filter-class> <init-param> <!-- A unique identifier for this SAML 2.0 Service Provider application -> <param-name>Issuer</param-name> <param-value>SSOSampleApp</param-value> </init-param> <init-param> <!-- The URL of the SAML 2.0 Identity Provider --> <param-name>IdpUrl</param-name> <param-value>https://localhost:9443/samlsso</param-value> </init-param> <init-param> <!-- The URL of the SAML 2.0 Assertion Consumer (i.e. SSO Login url of the app in this case) --> <param-name>ConsumerUrl</param-name> <param-value>http://localhost:8080/IdentityMgtApp/ssologin</paramvalue> </init-param> <init-param> <!-- Identifier given for the Service Provider for SAML 2.0 attribute exchange --> <param-name>AttributeConsumingServiceIndex</param-name> <param-value>1239245949</param-value> </init-param> <init-param> <!-This is the url of the login page, the authentication requests will be forwarded to <webapp_home_url>/<ssoLoginPage>. (e.g. localhost:8080/ssologin) --> <param-name>SSOLoginPage</param-name> <param-value>ssologin</param-value> </init-param> <init-param> <!-- This is the page to redirect the user after the authentication (i.e. user home page) --> Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 14/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada <param-name>HomePage</param-name> <param-value>home.jsp</param-value> </init-param> <init-param> <!-- This is the page to redirect user after the logout --> <param-name>LogoutPage</param-name> <param-value>logout.jsp</param-value> </init-param> <init-param> <!-- This is the attribute which defining the attribute Id for the subject name identifier value of the SAML assertion --> <param-name>SubjectNameAttributeId</param-name> <param-value>userName</param-value> </init-param> <init-param> <!-- This is the attribute which defining the trust store of the web application. This can be used to over write the default trust store--> <param-name>TrustStore</param-name> <param-value>/home/asela/security/client-truststore.jks</param-value> </init-param> <init-param> <!-- This is the attribute which defining the trust store password of the web application--> <param-name>TrustStorePassword</param-name> <param-value>wso2carbon</param-value> </init-param> <init-param> <!-- This is the attribute which defining the IDP public certificate alias name in defined trust store file --> <param-name>IDPCertAlias</param-name> <param-value>localhost</param-value> </init-param> <init-param> <!-- This is the page to redirect user if there are any error in agent --> <param-name>ErrorPage</param-name> <param-value>sso-errors.jsp</param-value> </init-param> <init-param> <!-- Identity server version. Whether it is 4 (4.X.X) or 3 (3.X.X) --> Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 15/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada <param-name>ServerVersion</param-name> <param-value>3.2.3</param-value> </init-param> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 16/32 WSO2 Webinar 4. WSO2 Webinar - WSO2IS Autenticación Federada CREACIÓN DE PROVEEDORES DE SERVICIO EN WSO2-IS Para que las aplicaciones que soportan SSO reciban el paquete de autenticación correspondiente es necesaria la creación de proveedores de servicio SSO. Durante la configuración de la plataforma de producción se crearon los siguientes proveedores de servicio A continuación se detalla la configuración realizada sobre cada uno. 4.1. Proveedor de Servicio carbonServer Este proveedor permite que se acceda a la consola de administración mediante SSO. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 17/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada La configuración de SAML2 debe ser la siguiente: ● ● NameID format: ○ urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified Custom logout URL: ○ https://idp.chakray.com:9443/carbon/admin/logout_action.jsp Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 18/32 WSO2 Webinar 4.2. WSO2 Webinar - WSO2IS Autenticación Federada Proveedor de Servicio avis.com Este proveedor permite que la aplicación de demo avis.com se acceda mediante SSO. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 19/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada La configuración de SAML2 debe ser la siguiente: Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 20/32 WSO2 Webinar 4.3. WSO2 Webinar - WSO2IS Autenticación Federada Proveedor de Servicio travelocity.com Este proveedor permite que la aplicación de demo travelocity.com se acceda mediante SSO. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 21/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada La configuración de SAML2 debe ser la siguiente: Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 22/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 23/32 WSO2 Webinar 5. WSO2 Webinar - WSO2IS Autenticación Federada VERIFICACIÓN DE SSO Acceder a la aplicación de demo travelocity https://localhost:9443/travelocity.com Como no estamos conectados, aparece la pantalla de login, si accedemos un login con SAML se nos redirige al login centralizado de WSO2IS Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 24/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Una vez nos autenticamos accedemos a la aplicación Y podemos pasarnos a la aplicación de demo (avis.com) sin tener que hacer un nuevo login Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 25/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Inclusive si accedemos a la consola tampoco tenemos que realizar un nuevo login Si hacemos logout en la consola y volvemos a acceder a la aplicación de demo observaremos que no estamos logueados Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 26/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada De este modo se verifica que los 3 proveedores están integrados en el dominio SSO del tenant. Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 27/32 WSO2 Webinar 6. WSO2 Webinar - WSO2IS Autenticación Federada IMPLEMENTACIÓN DE AUTENTICACIÓN FEDERADA A continuación se detalla cómo realizar una configuración para que el usuario puede identificarse en nuestras aplicaciones con sus credenciales de Google. 7. Registro de nuestra aplicación en Google 7.1. Acceder a la consola de developer de google https://console.developers.google.com 7.2. Crear un proyecto 7.3. Acceder a la sección de credenciales y seleccionar crear credenciales Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 28/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Seleccionar Id de Cliente de OAuth Al indicar la creación de pantalla de autorización completar con los siguientes datos ● ● Nombre: Autenticación para AVIS Image: http://wallpaperspicturesphotos.com/wp-content/uploads/2015/09/google-logo120x120.jpg Luego seleccionar el tipo aplicación web con los siguientes datos ● URLs de direccionamientos autorizados: https://localhost:9444/commonauth Copiar al portapapeles los valores generados para el id y secret del cliente y dar aceptar Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 29/32 WSO2 Webinar 7.4. WSO2 Webinar - WSO2IS Autenticación Federada Configuración en WSO2 Las siguientes tareas se realizan desde la consola de WSO2-IS: 7.4.1. Creación del Identity Provider Crear un Identity Provider con nombre Google-Test y especificar los siguientes datos en la sección de Federated Authentication -> OAuth2/OpenId Connect Configuration: ● Enable - true ● Default – true ● Authorization Endpoint URL – https://accounts.google.com/o/oauth2/auth ● Token Endpoint URL – https://accounts.google.com/o/oauth2/token ● Client Id – El cliente id generado por Google ● Client Secret – El client secret generado por Google ● Additional Query Parameters – scope=openid email Registrar el Identity Provider 7.4.2. Creación del Service Provider Crear un Identity Provider con nombre travelocity.com y configurar un SSO en la sección Inbound Authentication. Asignar los siguientes datos: Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 30/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Local & Outbound En la pantalla de configuración avanzada añadir los siguientes autenticadores Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 31/32 WSO2 Webinar WSO2 Webinar - WSO2IS Autenticación Federada Ejecutar Update Probar la aplicación Chakray - Gustavo Vazquez Amado Versión 1.0 Pág 32/32