Generic OAuth2 gem을 OAuth 2.0 인증 공급자로 사용

Tier: Free, Premium, Ultimate Offering: Self-managed
note
만약 귀하의 공급자가 OpenID 사양을 지원하는 경우, 귀하는 귀하의 인증 공급자로 omniauth-openid-connect를 사용해야 합니다.

omniauth-oauth2-generic gem은 GitLab과 귀하의 OAuth 2.0 공급자 또는 이 젬과 호환되는 OAuth 2.0 공급자 간의 단일 로그인 (SSO)을 허용합니다.

이 전략은 다음과 같은 OmniAuth SSO 프로세스의 구성을 허용합니다:

  1. 전략은 클라이언트를 귀하의 구성 가능한 승인 URL로 이동시키고 지정된 ID 및 키와 함께 이동합니다.
  2. OAuth 2.0 공급자는 요청, 사용자 및 (선택적으로) 사용자 프로필에 대한 권한 부여를 인증합니다.
  3. OAuth 2.0 공급자는 클라이언트를 GitLab로 돌려보내고 전략이 액세스 토큰을 검색합니다.
  4. 전략은 액세스 토큰을 사용하여 구성 가능한 “사용자 프로필” URL에서 사용자 정보를 요청합니다.
  5. 전략은 구성 가능한 형식을 사용하여 응답에서 사용자 정보를 구문 분석합니다.
  6. GitLab은 반환된 사용자를 찾거나 생성하고 그들을 로그인시킵니다.

이 전략:

  • 단일 로그인에만 사용할 수 있으며, 다른 어떤 OAuth 2.0 공급자가 제공하는 권한은 제공하지 않습니다. 예: 프로젝트 또는 사용자 가져오기.
  • 가장 일반적으로 GitLab과 같은 클라이언트-서버 애플리케이션에 대한 것으로, 승인 부여 흐름을 지원합니다.
  • 하나 이상의 URL에서 사용자 정보를 가져올 수 없습니다.
  • JSON을 제외한 사용자 정보 형식으로 테스트되지 않았습니다.

OAuth 2.0 공급자 구성

공급자를 구성하려면 다음 단계를 완료하세요:

  1. 사용하려는 OAuth 2.0 공급자에서 귀하의 애플리케이션을 등록합니다.

    애플리케이션 등록 시 제공하는 리디렉션 URI는 다음과 같아야 합니다:

    http://your-gitlab.host.com/users/auth/oauth2_generic/callback
    

    이제 클라이언트 ID 및 클라이언트 비밀 키를 가져올 수 있어야 합니다. 이 정보는 각 공급자마다 다릅니다. 이것은 또한 애플리케이션 ID 및 애플리케이션 비밀로 불릴 수도 있습니다.

  2. 귀하의 GitLab 서버에서 다음 단계를 완료하세요.

    Linux package (Omnibus)
    1. 공통 설정을 구성하여 oauth2_generic을 단일 로그인 공급자로 추가합니다. 이렇게 함으로써 기존 GitLab 계정이 없는 사용자를 위해 즉시 계정 프로비저닝이 활성화됩니다.
    2. /etc/gitlab/gitlab.rb을 편집하여 귀하의 공급자 구성을 추가하세요. 예:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "oauth2_generic",
          label: "공급자 이름", # 선택적으로 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
          app_id: "<귀하의_앱_클라이언트_ID>",
          app_secret: "<귀하의_앱_클라이언트_시크릿>",
          args: {
            client_options: {
              site: "<귀하의_인증_서버_URL>",
              user_info_url: "/oauth2/v1/userinfo",
              authorize_url: "/oauth2/v1/authorize",
              token_url: "/oauth2/v1/token"
            },
            user_response_structure: {
              root_path: [],
              id_path: ["sub"],
              attributes: {
                email: "email",
                name: "name"
              }
            },
            authorize_params: {
              scope: "openid profile email"
            },
            strategy_class: "OmniAuth::Strategies::OAuth2Generic"
          }
        }
      ]
      
    3. 파일을 저장하고 GitLab을 재구성하세요:

      sudo gitlab-ctl reconfigure
      
    Helm chart (Kubernetes)
    1. 공통 설정을 구성하여 oauth2_generic을 단일 로그인 공급자로 추가합니다. 이렇게 함으로써 기존 GitLab 계정이 없는 사용자를 위해 즉시 계정 프로비저닝이 활성화됩니다.
    2. Helm 값을 내보냅니다:

      helm get values gitlab > gitlab_values.yaml
      
    3. 다음 내용을 oauth2_generic.yaml이라는 파일에 넣어서 Kubernetes Secret로 사용하세요:

      name: "oauth2_generic"
      label: "공급자 이름" # 선택적 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
      app_id: "<귀하의_앱_클라이언트_ID>"
      app_secret: "<귀하의_앱_클라이언트_시크릿>"
      args:
        client_options:
          site: "<귀하의_인증_서버_URL>"
          user_info_url: "/oauth2/v1/userinfo"
          authorize_url: "/oauth2/v1/authorize"
          token_url: "/oauth2/v1/token"
        user_response_structure:
          root_path: []
          id_path: ["sub"]
          attributes:
            email: "email"
            name: "name"
        authorize_params:
          scope: "openid profile email"
        strategy_class: "OmniAuth::Strategies::OAuth2Generic"
      
    4. Kubernetes Secret를 생성하세요:

      kubectl create secret generic -n <namespace> gitlab-oauth2-generic --from-file=provider=oauth2_generic.yaml
      
    5. gitlab_values.yaml을 편집하고 공급자 구성을 추가하세요:

      global:
        appConfig:
          omniauth:
            providers:
              - secret: gitlab-oauth2-generic
      
    6. 파일을 저장하고 새 값들을 적용하세요:

      helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
      
    Self-compiled (source)
    1. 공통 설정을 구성하여 oauth2_generic을 단일 로그인 공급자로 추가합니다. 이렇게 함으로써 기존 GitLab 계정이 없는 사용자를 위해 즉시 계정 프로비저닝이 활성화됩니다.
    2. /home/git/gitlab/config/gitlab.yml을 편집하세요:

      production: &base
        omniauth:
          providers:
            - { name: "oauth2_generic",
                label: "공급자 이름", # 선택적 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
                app_id: "<귀하의_앱_클라이언트_ID>",
                app_secret: "<귀하의_앱_클라이언트_시크릿>",
                args: {
                  client_options: {
                    site: "<귀하의_인증_서버_URL>",
                    user_info_url: "/oauth2/v1/userinfo",
                    authorize_url: "/oauth2/v1/authorize",
                    token_url: "/oauth2/v1/token"
                  },
                  user_response_structure: {
                    root_path: [],
                    id_path: ["sub"],
                    attributes: {
                      email: "email",
                      name: "name"
                    }
                  },
                  authorize_params: {
                    scope: "openid profile email"
                  },
                  strategy_class: "OmniAuth::Strategies::OAuth2Generic"
                }
              }
      
    3. 파일을 저장하고 GitLab을 다시 시작하세요:

      # systemd를 실행 중인 시스템인 경우
      sudo systemctl restart gitlab.target
            
      # SysV init을 실행 중인 시스템인 경우
      sudo service gitlab restart
      

로그인 페이지에는 이제 일반 로그인 양식 아래에 새로운 아이콘이 있어야 합니다. 해당 아이콘을 선택하여 귀하의 공급자 인증 프로세스를 시작하세요. 이렇게 하면 브라우저가 귀하의 OAuth 2.0 공급자의 인증 페이지로 이동합니다. 모든 것이 잘 되면, 귀하는 귀하의 GitLab 인스턴스로 돌아와서 로그인됩니다.