Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Customiser le connecteur  SAML de Liferay

25 views

Published on

Customiser le connecteur  SAML de Liferay pour faire du SSO spécifique.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Customiser le connecteur  SAML de Liferay

  1. 1. Customiser le connecteur SAML de Liferay Quang Tu LE
  2. 2. Quang Tu LE Consultant Technique indépendant •  Java/Web depuis 2000 •  Liferay depuis la version 4.2.2 (2006) @qtle linkedin.com/in/quangtule
  3. 3. Sommaire •  Contexte •  Besoin •  Solution •  Mise en place
  4. 4. Contexte •  Portail intranet du Groupe – L’authentification LDAP •  Application mobile – Oauth2 (Password Grant) – Code pin personnel, reconnaissance empreinte
  5. 5. Besoin •  se connecter de façon «Social Connect» via la fédération d'annuaire •  fédération d'annuaire –  WebSSO –  SAML –  Proxy IDP
  6. 6. Solution •  Liferay Connector to SAML – https://web.liferay.com/marketplace/-/mp/ application/15188711 – Liferay est le Service Provider (SP) – Fédération d'annuaire est Identity Provider Federation (IDP Proxy) – Customiser le comportement du connecteur SAML
  7. 7. Cinématique d’authentification SamlSpSsoFilter
  8. 8. SamlSpSsoFilter •  intercepte /c/portal/ login pour déclencher login SSO protected void doProcessFilter( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws Exception { String requestPath = _samlHttpRequestUtil.getRequestPath(request); … else if (requestPath.equals("/c/portal/login")) { login(request, response); } else if (requestPath.equals("/c/portal/logout") && _singleLogoutProfile.isSingleLogoutSupported(request) ) {
  9. 9. Solution •  /c/portal/loginGardian
  10. 10. SamlSpSsoFilter customisé •  Customiser afin de intercepter /c/portal/loginGardian au lieu de /c/portal/login protected void doProcessFilter( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws Exception { String requestPath = _samlHttpRequestUtil.getRequestPath(request); … else if (requestPath.equals("/c/portal/loginGardian")) { login(request, response); } else if (requestPath.equals("/c/portal/logout") && _singleLogoutProfile.isSingleLogoutSupported(request)) {
  11. 11. SamlSpSsoFilter customisé v2 •  Configurable via une configuration OSGI @Component( configurationPid = "com.edf.liferay.saml.runtime.configuration.VeolSSOConfiguration", configurationPolicy = ConfigurationPolicy.OPTIONAL, immediate = true, property = { "after-filter=Virtual Host Filter", "dispatcher=FORWARD", "dispatcher=REQUEST", "init-param.url-regex-ignore-pattern=^/html/.+.(css|gif|html|ico|jpg|js| png)(?.*)?$", "servlet-context-name=", "servlet-filter-name=SSO SAML SP Filter", "url-pattern=/*" }, service = Filter.class ) public class SamlSpSsoFilter extends BaseSamlPortalFilter {
  12. 12. Mise en place •  faire un override partiel du fichier lpkg de Liferay •  https://portal.liferay.dev/docs/7-0/tutorials/-/ knowledge_base/t/overriding-lpkg-files •  Reconstruire le jar com.liferay.saml.impl.jar présent dans le lpkg, •  Le déposer dans osgi/marketplace/ override •  et Liferay va le substituer au démarrage
  13. 13. Comment reconstruire le jar? •  Customiser les classes concernées •  Customiser le composant OSGI (xml) •  Packager flat jar à partir du jar original – META-INF/MANIFEST.MF – OSGI-INF/.xml
  14. 14. Mise en place Extrait depuis fichier lpkg Customisés
  15. 15. Build.gradle
  16. 16. SamlSpSsoFilter.xml
  17. 17. SamlSpSsoFilter.xml
  18. 18. VeolSSOConfiguration.xml
  19. 19. VeolSSOConfiguration.xml
  20. 20. Conclusion •  Surcharger 1 jar dans son package lpkg est possible! •  Chacun peut faire à sa sauce J •  Avec modération.
  21. 21. Merci! Question?
  22. 22. SSO avec application mobile SP IDP /c/portal/oauth2/gardianidp veol://callback?tokenId=xxx webview 3.Authentifier 1.Demande une ressource 2. AuthnRequest 4.Reponse 5.Redirect vers la ressource
  23. 23. SSO avec application mobile OauthProvider GRANT_TYPE=IMPLICIT tokenId=xxx AccessToken RefreshToken

×