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 제공자 또는 이 gen과 호환되는 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 패키지 (Omnibus)
    1. 일반 설정을 구성하여 oauth2_generic을 싱글 사인온 제공자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자를 위해 신규 계정 프로비저닝(JIT)을 가능하게 합니다.
    2. /etc/gitlab/gitlab.rb를 편집하여 제공자를 위한 구성을 추가합니다. 예를 들어:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "oauth2_generic",
          label: "Provider name", # 선택 사항 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
          app_id: "<your_app_client_id>",
          app_secret: "<your_app_client_secret>",
          args: {
            client_options: {
              site: "<your_auth_server_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 차트 (Kubernetes)
    1. 일반 설정을 구성하여 oauth2_generic을 싱글 사인온 제공자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자를 위해 신규 계정 프로비저닝(JIT)을 가능하게 합니다.
    2. Helm 값을 내보냅니다:

      helm get values gitlab > gitlab_values.yaml
      
    3. oauth2_generic.yaml이라는 이름의 파일에 다음 내용을 넣어 사용할 수 있도록 Kubernetes Secret로 만듭니다:

      name: "oauth2_generic"
      label: "Provider name" # 선택 사항 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
      app_id: "<your_app_client_id>"
      app_secret: "<your_app_client_secret>"
      args:
        client_options:
          site: "<your_auth_server_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
      
    본인 컴파일 (소스)
    1. 일반 설정을 구성하여 oauth2_generic을 싱글 사인온 제공자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자를 위해 신규 계정 프로비저닝(JIT)을 가능하게 합니다.
    2. /home/git/gitlab/config/gitlab.yml을 편집합니다:

      production: &base
        omniauth:
          providers:
            - { name: "oauth2_generic",
                label: "Provider name", # 선택 사항 로그인 버튼에 대한 레이블, 기본값은 "Oauth2 Generic"
                app_id: "<your_app_client_id>",
                app_secret: "<your_app_client_secret>",
                args: {
                  client_options: {
                    site: "<your_auth_server_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 인스턴스로 돌아와 로그인됩니다.