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

Tier: Free, Premium, Ultimate Offering: Self-Managed, GitLab Dedicated

참고: 특정 Shibboleth 식별 제공자(IdP)를 통합하려면 GitLab SAML 통합을 사용하세요. Shibboleth 페더레이션 지원(Discovery Service)의 경우, 이 문서를 사용하세요.

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

리버스 프록시 설정을 사용하여 다른 인스턴스에서 Shibboleth 서비스 제공자를 실행하려면 Linux 패키지의 번들된 NGINX를 사용할 수 있습니다. 그러나 이를 수행하지 않는 경우, 번들된 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
    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" => "로그인 버튼 텍스트",
        "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로 리디렉션되어 로그인됩니다.