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. /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로 돌아와서 로그인됩니다.