Shibboleth을 인증 제공자로 사용하기

Tier: Free, Premium, Ultimate Offering: Self-Managed, GitLab Dedicated
note
GitLab SAML 통합을 사용하여 특정 Shibboleth 식별 공급자(IdP)를 통합합니다. Shibboleth 연합 지원(디스커버리 서비스)을 위해서는 이 문서를 사용하세요.

GitLab에서 Shibboleth 지원을 활성화하려면 NGINX 대신 Apache를 사용하세요. Apache는 Shibboleth 인증을 위해 mod_shib2 모듈을 사용하며, 속성을 OmniAuth Shibboleth 공급자로 헤더로 전달할 수 있습니다.

리버스 프록시 설정을 사용하여 Linux 패키지에 제공된 번들 NGINX를 사용하여 다른 인스턴스에서 Shibboleth 서비스 제공자를 실행할 수 있습니다. 그러나 이렇게 하지 않는 경우, 번들 NGINX는 구성하기 어렵습니다.

Shibboleth OmniAuth 제공자를 활성화하려면 다음을 수행해야 합니다:

Shibboleth을 활성화하려면:

  1. OmniAuth Shibboleth 콜백 URL 보호:

    <Location /users/auth/shibboleth/callback>
      AuthType shibboleth
      ShibRequestSetting requireSession 1
      ShibUseHeaders On
      require valid-user
    </Location>
    
    Alias /shibboleth-sp /usr/share/shibboleth
    <Location /shibboleth-sp>
      Satisfy any
    </Location>
    
    <Location /Shibboleth.sso>
      SetHandler shib
    </Location>
    
  2. Shibboleth URL을 재작성에서 제외합니다. RewriteCond %{REQUEST_URI} !/Shibboleth.ssoRewriteCond %{REQUEST_URI} !/shibboleth-sp을 추가합니다. 예제 구성:

    # Nginx try files의 Apache equivalent
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/Shibboleth.sso
    RewriteCond %{REQUEST_URI} !/shibboleth-sp
    RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]
    RequestHeader set X_FORWARDED_PROTO 'https'
    
  3. /etc/gitlab/gitlab.rb에 Shibboleth를 OmniAuth 제공자로 추가합니다. 사용자 속성은 Apache 리버스 프록시에서 Shibboleth 속성 매핑의 이름으로 GitLab으로 헤더로 전송됩니다. 따라서 args 해시의 값은 "HTTP_ATTRIBUTE" 형식이어야 합니다. 해시의 키는 OmniAuth::Strategies::Shibboleth 클래스의 인수이며, omniauth-shibboleth-redux 젬에 의해 문서화되어 있습니다 (GitLab과 함께 패키지화된 젬의 버전을 주의해서 참고하십시오).

    파일은 다음과 같아야 합니다:

    external_url 'https://gitlab.example.com'
    gitlab_rails['internal_api_url'] = 'https://gitlab.example.com'
    
    # Nginx 비활성화
    nginx['enable'] = false
    
    gitlab_rails['omniauth_allow_single_sign_on'] = true
    gitlab_rails['omniauth_block_auto_created_users'] = false
    gitlab_rails['omniauth_providers'] = [
      {
        "name"  => "shibboleth",
        "label" => "Login Button에 대한 텍스트",
        "args"  => {
            "shib_session_id_field"     => "HTTP_SHIB_SESSION_ID",
            "shib_application_id_field" => "HTTP_SHIB_APPLICATION_ID",
            "uid_field"                 => 'HTTP_EPPN',
            "name_field"                => 'HTTP_CN',
            "info_fields"               => { "email" => 'HTTP_MAIL'}
        }
      }
    ]
    

    일부 사용자가 Shibboleth 및 Apache에 의해 인증되었지만 GitLab이 “이메일이 잘못되었습니다”를 포함하는 URI로 사용자 계정을 거부하는 경우 Shibboleth Identity Provider 또는 Attribute Authority에서 여러 이메일 주소를 선언할 수 있습니다. 이 경우 multi_values 인수를 first로 설정하는 것을 고려하십시오.

  4. 변경 사항을 적용하려면:

    • Linux 패키지 설치의 경우 재구성을 수행하십시오.
    • 자체 컴파일 설치의 경우 재시작을 수행하십시오.

로그인 페이지에는 이제 일반 로그인 양식 아래 Shibboleth로 로그인 아이콘이 표시됩니다. 해당 아이콘을 선택하여 인증 프로세스를 시작합니다. Shibboleth 모듈 구성에 따라 적절한 IdP 서버로 리디렉션됩니다. 모든 것이 잘되면 GitLab으로 돌아와 로그인됩니다.