Shibboleth을 인증 공급자로 사용

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

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. Shibboleth을 /etc/gitlab/gitlab.rb에 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 ID 공급자 또는 속성 권한 부여자가 여러 이메일 주소를 주장할 수 있습니다. 이 경우 multi_values 인수를 first로 설정하는 것을 고려해 보세요.

  4. 변경 사항이 적용되려면:

    • Linux 패키지 설치의 경우, GitLab을 재구성하세요.
    • 자체 컴파일 설치의 경우, GitLab을 다시 시작하세요.

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