Chciałbym skonfigurować Pentaho z wielokrotniedziałkowym loginem SSO za pomocą wtyczki SAML Link (który rozciąga się sprężyny Saml).

W tej chwili zadeklarowałem wielu dostawców usług (SPS) i dostawców tożsamości (IDPS) w Blueprint.xml (jeden dla każdego najemca plus wspólny sp). Jednak na końcu przepływu logowania nie jestem przekierowany na stronę główną, ale do ogólnej strony błędu.


Oto przykład konfiguracji blueprint.xml w wtyczce SAML:

  <bean id="spResourceFactoryCommon" class="org.pentaho.platform.spring.security.saml.resources.MetadataResourceFactory">
    <argument>
      <map key-type="java.lang.String" value-type="java.lang.String">
        <entry key="org.opensaml.util.resource.FilesystemResource" value="${saml.sp.metadata.filesystem.common}" />
      </map>
    </argument>
    <argument value="${saml.sp.metadata.classpath.fallback}" />
  </bean>

  <bean id="spResourceFactoryTenant1" class="org.pentaho.platform.spring.security.saml.resources.MetadataResourceFactory">
    <argument>
      <map key-type="java.lang.String" value-type="java.lang.String">
        <entry key="org.opensaml.util.resource.FilesystemResource" value="${saml.sp.metadata.filesystem.tenant1}" />
      </map>
    </argument>
    <argument value="${saml.sp.metadata.classpath.fallback}" />
  </bean>

  <bean id="spResourceFactoryTenant2" class="org.pentaho.platform.spring.security.saml.resources.MetadataResourceFactory">
    <argument>
      <map key-type="java.lang.String" value-type="java.lang.String">
        <entry key="org.opensaml.util.resource.FilesystemResource" value="${saml.sp.metadata.filesystem.tenant2}" />
      </map>
    </argument>
    <argument value="${saml.sp.metadata.classpath.fallback}" />
  </bean>

  <bean id="idpResourceFactoryTenant1" class="org.pentaho.platform.spring.security.saml.resources.MetadataResourceFactory">
    <argument>
      <map key-type="java.lang.String" value-type="java.lang.String">
        <entry key="org.opensaml.util.resource.FilesystemResource" value="${saml.idp.metadata.filesystem.tenant1}" />
      </map>
    </argument>
    <argument value="${saml.idp.metadata.classpath.fallback}" />
  </bean>

  <bean id="idpResourceFactoryTenant2" class="org.pentaho.platform.spring.security.saml.resources.MetadataResourceFactory">
    <argument>
      <map key-type="java.lang.String" value-type="java.lang.String">
        <entry key="org.opensaml.util.resource.FilesystemResource" value="${saml.idp.metadata.filesystem.tenant2}" />
      </map>
    </argument>
    <argument value="${saml.idp.metadata.classpath.fallback}" />
  </bean>

  <!-- MetadataManager configuration - paths to metadata of IDPs and SP's  -->
  <bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager" depends-on="pentahoSamlBootstrap">
    <argument>
      <list>
        <!-- sp metadata with extended metadata -->
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
          <argument>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
              <argument>
                <bean class="java.util.Timer"/>
              </argument>
              <argument>
                <bean factory-ref="spResourceFactoryCommon" factory-method="factoryResource" />
              </argument>
              <property name="parserPool" ref="parserPool"/>
            </bean>
          </argument>
          <argument>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
              <property name="idpDiscoveryEnabled" value="${saml.discovery.idp.enabled}"/>
              <property name="requireLogoutRequestSigned" value="${ensure.incoming.logout.request.signed}"/>
              <property name="alias" value="pentahoCommon"/>
              <property name="local" value="true"/>
            </bean>
          </argument>
        </bean>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
          <argument>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
              <argument>
                <bean class="java.util.Timer"/>
              </argument>
              <argument>
                <bean factory-ref="spResourceFactoryTenant1" factory-method="factoryResource" />
              </argument>
              <property name="parserPool" ref="parserPool"/>
            </bean>
          </argument>
          <argument>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
              <property name="idpDiscoveryEnabled" value="${saml.discovery.idp.enabled}"/>
              <property name="requireLogoutRequestSigned" value="${ensure.incoming.logout.request.signed}"/>
              <property name="alias" value="tenant1sp"/>
              <property name="local" value="true"/>
            </bean>
          </argument>
        </bean>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
          <argument>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
              <argument>
                <bean class="java.util.Timer"/>
              </argument>
              <argument>
                <bean factory-ref="spResourceFactoryTenant2" factory-method="factoryResource" />
              </argument>
              <property name="parserPool" ref="parserPool"/>
            </bean>
          </argument>
          <argument>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
              <property name="idpDiscoveryEnabled" value="${saml.discovery.idp.enabled}"/>
              <property name="requireLogoutRequestSigned" value="${ensure.incoming.logout.request.signed}"/>
              <property name="alias" value="tenant2sp"/>
              <property name="local" value="true"/>
            </bean>
          </argument>
        </bean>

        <!-- idp metadata -->
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
          <argument>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
              <argument>
                <bean class="java.util.Timer"/>
              </argument>
              <argument>
                <bean factory-ref="idpResourceFactoryTenant1" factory-method="factoryResource" />
              </argument>
              <property name="parserPool" ref="parserPool"/>
            </bean>
          </argument>
          <argument>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
              <property name="idpDiscoveryEnabled" value="${saml.discovery.idp.enabled}"/>
              <property name="requireLogoutRequestSigned" value="${ensure.outgoing.logout.request.signed}"/>
              <property name="requireLogoutResponseSigned" value="${ensure.outgoing.logout.response.signed}"/>
              <property name="alias" value="tenant1idp"/>
              <property name="local" value="true"/>
            </bean>
          </argument>
        </bean>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
          <argument>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
              <argument>
                <bean class="java.util.Timer"/>
              </argument>
              <argument>
                <bean factory-ref="idpResourceFactoryTenant2" factory-method="factoryResource" />
              </argument>
              <property name="parserPool" ref="parserPool"/>
            </bean>
          </argument>
          <argument>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
              <property name="idpDiscoveryEnabled" value="${saml.discovery.idp.enabled}"/>
              <property name="requireLogoutRequestSigned" value="${ensure.outgoing.logout.request.signed}"/>
              <property name="requireLogoutResponseSigned" value="${ensure.outgoing.logout.response.signed}"/>
              <property name="alias" value="tenant2idp"/>
              <property name="local" value="true"/>
            </bean>
          </argument>
        </bean>

      </list>
    </argument>
    <property name="keyManager" ref="keyManager" />
    <property name="defaultIDP" value="${saml.idp.url}" />
  </bean>

Dzięki tej konfiguracji, kiedy idę do URL https://my.Application.com/pentaho/ Alias / Tenant1sp / sp? IDP = Tenant.1.name Jestem przekierowany do strony logowania odsłoniętej przez IDP dla najemcy1. Po zalogowaniu jestem przekierowany do poprzedniego URL Uzyskiwanie ogólnego błędu: Zobacz zrzut ekranu

Przepraszam, coś poszło nie tak. Spróbuj ponownie lub skontaktuj się z administratorem systemu.

Jeśli pójdę do adresu URL https://my.application.com/pentaho/Home I Jestem zalogowany do pulpitu pentaho. To sprawia, że myślę, że proces logowania odniósł sukces, ale coś poszło nie tak z przekierowaniem na końcu przepływu. Rzeczywiście spodziewałbym się przekierowania do adresu URL https://my.Application.com/pentaho/home . Czy mogę skonfigurować to przekierowanie gdzieś / jakoś?

0
effedici 7 październik 2020, 12:24

1 odpowiedź

Najlepsza odpowiedź

Praca wokół wydaje się rozwiązać ten problem, , jednak widzę, że tworzy konflikt z uwierzytelnianiem SAML podczas korzystania z odsłoniętego apis pentaho. Aby użyć tych API, to rozwiązanie nie jest dobre.


Pracować


Zmień defaultTargeturl i zawszeusedefaulttargeturl sukcesRedirecthandler fasola (zadeklarowany w pliku blueprint.xml pentaho- Wtyczka SAML)

  <!-- Handler deciding where to redirect user after successful login -->
  <bean id="successRedirectHandler" class="org.pentaho.platform.spring.security.saml.PentahoSamlAuthenticationSuccessHandler" 
                        init-method="afterPropertiesSet">
    <property name="defaultTargetUrl" value="https://my.application.com/pentaho/Home"/>
    <property name="alwaysUseDefaultTargetUrl" value="true"/>
    <property name="requireProxyWrapping" value="false"/>
  </bean>

Edytuj: Rozdzielczość problemu logowania OFAPIS Rozszerzyłem klasę Org.pentaho.platform.Spring.security

private String contextPath;

@Override
public void onAuthenticationSuccess(HttpServletRequest request,
                                    HttpServletResponse response,
                                    Authentication authentication) throws ServletException, IOException {

    SavedRequest savedRequest = requestCache.getRequest(request, response);
    
    //Apply the redirect to the Pentaho console Home if and only if the original targetUrl is not a Pentaho exposed API but the home (contextPath/Home)
    if (!savedRequest.getRedirectUrl().contains("API")
            && savedRequest.getRedirectUrl().contains(contextPath+"/Home")) {
        
        //The Pentaho console Home is set as defaultTargetUrl in the blueprint.xml
        this.setAlwaysUseDefaultTargetUrl(true);
        log.info("The request is not on a Pentaho API. Forcing the target URL to redirect to the defaultTargetUrl");
    }
    super.onAuthenticationSuccess(request, response, authentication);
    
    //retore the original value of alwaysUseDefaultTargetUrl
    this.setAlwaysUseDefaultTargetUrl(false);
}
0
effedici 17 listopad 2020, 10:18