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

Documentos relacionados