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

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated
note
특정 Shibboleth ID 제공자(IdP)를 통합하려면 GitLab SAML 통합을 사용하세요. Shibboleth 연합 지원(Discovery Service) 관련 문서는 이 문서를 사용합니다.

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 등가물  
    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를 OmniAuth 제공자로 /etc/gitlab/gitlab.rb에 추가하세요. 사용자 속성은 Apache 역방향 프록시에서 GitLab으로 헤더 형태로 전송됩니다. Shibboleth 속성 매핑에서 이름을 따릅니다. 그래서 args 해시의 값은 "HTTP_ATTRIBUTE" 형태여야 합니다. 해시의 키는 OmniAuth::Strategies::Shibboleth 클래스의 인수이며, omniauth-shibboleth-redux gem에 의해 문서화됩니다 (GitLab에 패키지된 gem의 버전을 주의하세요).

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

    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이 “e-mail is invalid”를 포함한 URI로 계정을 거부하는 경우, Shibboleth ID 제공자 또는 속성 기관이 여러 이메일 주소를 주장하고 있을 수 있습니다. 이 경우, multi_values 인수를 first로 설정하는 것을 고려하세요.

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

    • Linux 패키지 설치의 경우, 재구성 GitLab.
    • 셀프 컴파일 설치의 경우, 재시작 GitLab.

로그인 페이지에는 이제 일반 로그인 양식 아래에 Sign in with: Shibboleth 아이콘이 있어야 합니다. 아이콘을 선택하여 인증 프로세스를 시작하세요. 적절한 IdP 서버로 리디렉션됩니다. 모든 것이 잘 진행되면 GitLab로 돌아와서 로그인됩니다.