InfoGrab Docs

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

요약

공급자가 OpenID 사양을 지원하는 경우 omniauth-openid-connect를 인증 공급자로 사용해야 합니다. omniauth-oauth2-generic gem은 GitLab과 OAuth 2.0 공급자 또는 이 gem과 호환되는 OAuth 2.0 공급자 간의 싱글 사인온(SSO)을 허용합니다.

Note

공급자가 OpenID 사양을 지원하는 경우 omniauth-openid-connect를 인증 공급자로 사용해야 합니다.

omniauth-oauth2-generic gem은 GitLab과 OAuth 2.0 공급자 또는 이 gem과 호환되는 OAuth 2.0 공급자 간의 싱글 사인온(SSO)을 허용합니다.

이 전략을 사용하면 다음 OmniAuth SSO 프로세스를 구성할 수 있습니다:

  1. 전략은 지정된 ID와 키와 함께 클라이언트를 인증 URL(구성 가능)로 안내합니다.
  2. OAuth 2.0 공급자는 요청, 사용자 및 (선택적으로) 사용자 프로필에 대한 액세스 인증을 처리합니다.
  3. OAuth 2.0 공급자는 전략이 액세스 토큰을 검색하는 GitLab으로 클라이언트를 다시 안내합니다.
  4. 전략은 액세스 토큰을 사용하여 구성 가능한 "사용자 프로필" URL에서 사용자 정보를 요청합니다.
  5. 전략은 구성 가능한 형식을 사용하여 응답에서 사용자 정보를 파싱합니다.
  6. GitLab은 반환된 사용자를 찾거나 만들고 로그인합니다.

이 전략:

  • 싱글 사인온에만 사용할 수 있으며 OAuth 2.0 공급자가 부여한 다른 액세스는 제공하지 않습니다. 예를 들어, 프로젝트나 사용자 가져오기.
  • 클라이언트-서버 애플리케이션인 GitLab에 가장 일반적인 Authorization Grant 흐름만 지원합니다.
  • 둘 이상의 URL에서 사용자 정보를 가져올 수 없습니다.
  • JWT 형식의 액세스 토큰에서 사용자 정보를 가져올 수 없습니다.
  • JSON을 제외한 사용자 정보 형식으로 테스트되지 않았습니다.

OAuth 2.0 공급자 구성#

공급자를 구성하려면:

  1. 인증하려는 OAuth 2.0 공급자에 애플리케이션을 등록하세요.

    애플리케이션을 등록할 때 제공하는 리다이렉트 URI는 다음과 같아야 합니다:

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

    이제 클라이언트 ID와 클라이언트 시크릿을 얻을 수 있어야 합니다. 이들이 나타나는 위치는 공급자마다 다릅니다. 이것은 애플리케이션 ID와 애플리케이션 시크릿이라고도 불릴 수 있습니다.

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

  3. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.

    1. /etc/gitlab/gitlab.rb를 편집하여 공급자에 대한 구성을 추가하세요. 예를 들어:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "oauth2_generic",
          label: "Provider name", # optional label for login button, defaults to "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"
          }
        }
      ]
      
    2. 파일을 저장하고 GitLab을 재구성하세요:

      sudo gitlab-ctl reconfigure
      
  1. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.
    1. Helm 값을 내보내세요:

      helm get values gitlab > gitlab_values.yaml
      
    2. Kubernetes 시크릿으로 사용하기 위해 oauth2_generic.yaml이라는 파일에 다음 내용을 넣으세요:

      name: "oauth2_generic"
      label: "Provider name" # optional label for login button defaults to "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. Kubernetes 시크릿을 만드세요:

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

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

      helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
      
  1. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.
    1. /home/git/gitlab/config/gitlab.yml을 편집하세요:

      production: &base
        omniauth:
          providers:
            - { name: "oauth2_generic",
                label: "Provider name", # optional label for login button, defaults to "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"
                }
              }
      
    2. 파일을 저장하고 GitLab을 재시작하세요:

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

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

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

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

공급자가 OpenID 사양을 지원하는 경우 omniauth-openid-connect를 인증 공급자로 사용해야 합니다. omniauth-oauth2-generic gem은 GitLab과 OAuth 2.0 공급자 또는 이 gem과 호환되는 OAuth 2.0 공급자 간의 싱글 사인온(SSO)을 허용합니다.

Note

공급자가 OpenID 사양을 지원하는 경우 omniauth-openid-connect를 인증 공급자로 사용해야 합니다.

omniauth-oauth2-generic gem은 GitLab과 OAuth 2.0 공급자 또는 이 gem과 호환되는 OAuth 2.0 공급자 간의 싱글 사인온(SSO)을 허용합니다.

이 전략을 사용하면 다음 OmniAuth SSO 프로세스를 구성할 수 있습니다:

  1. 전략은 지정된 ID와 키와 함께 클라이언트를 인증 URL(구성 가능)로 안내합니다.
  2. OAuth 2.0 공급자는 요청, 사용자 및 (선택적으로) 사용자 프로필에 대한 액세스 인증을 처리합니다.
  3. OAuth 2.0 공급자는 전략이 액세스 토큰을 검색하는 GitLab으로 클라이언트를 다시 안내합니다.
  4. 전략은 액세스 토큰을 사용하여 구성 가능한 "사용자 프로필" URL에서 사용자 정보를 요청합니다.
  5. 전략은 구성 가능한 형식을 사용하여 응답에서 사용자 정보를 파싱합니다.
  6. GitLab은 반환된 사용자를 찾거나 만들고 로그인합니다.

이 전략:

  • 싱글 사인온에만 사용할 수 있으며 OAuth 2.0 공급자가 부여한 다른 액세스는 제공하지 않습니다. 예를 들어, 프로젝트나 사용자 가져오기.
  • 클라이언트-서버 애플리케이션인 GitLab에 가장 일반적인 Authorization Grant 흐름만 지원합니다.
  • 둘 이상의 URL에서 사용자 정보를 가져올 수 없습니다.
  • JWT 형식의 액세스 토큰에서 사용자 정보를 가져올 수 없습니다.
  • JSON을 제외한 사용자 정보 형식으로 테스트되지 않았습니다.

OAuth 2.0 공급자 구성#

공급자를 구성하려면:

  1. 인증하려는 OAuth 2.0 공급자에 애플리케이션을 등록하세요.

    애플리케이션을 등록할 때 제공하는 리다이렉트 URI는 다음과 같아야 합니다:

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

    이제 클라이언트 ID와 클라이언트 시크릿을 얻을 수 있어야 합니다. 이들이 나타나는 위치는 공급자마다 다릅니다. 이것은 애플리케이션 ID와 애플리케이션 시크릿이라고도 불릴 수 있습니다.

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

  3. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.

    1. /etc/gitlab/gitlab.rb를 편집하여 공급자에 대한 구성을 추가하세요. 예를 들어:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "oauth2_generic",
          label: "Provider name", # optional label for login button, defaults to "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"
          }
        }
      ]
      
    2. 파일을 저장하고 GitLab을 재구성하세요:

      sudo gitlab-ctl reconfigure
      
  1. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.
    1. Helm 값을 내보내세요:

      helm get values gitlab > gitlab_values.yaml
      
    2. Kubernetes 시크릿으로 사용하기 위해 oauth2_generic.yaml이라는 파일에 다음 내용을 넣으세요:

      name: "oauth2_generic"
      label: "Provider name" # optional label for login button defaults to "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. Kubernetes 시크릿을 만드세요:

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

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

      helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
      
  1. oauth2_generic을 싱글 사인온 공급자로 추가하도록 일반 설정을 구성하세요. 이를 통해 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다.
    1. /home/git/gitlab/config/gitlab.yml을 편집하세요:

      production: &base
        omniauth:
          providers:
            - { name: "oauth2_generic",
                label: "Provider name", # optional label for login button, defaults to "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"
                }
              }
      
    2. 파일을 저장하고 GitLab을 재시작하세요:

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

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