일반적인 OAuth2 gem을 OAuth 2.0 인증 공급자로 사용하기
omniauth-openid-connect
를 사용해야 합니다.omniauth-oauth2-generic
gem은 GitLab과 귀하의 OAuth 2.0 공급자 또는 이 gem과 호환되는 모든 OAuth 2.0 공급자 간의 단일 로그인(SSO)을 허용합니다.
이 전략은 이 OmniAuth SSO 프로세스를 구성할 수 있게 합니다:
- 전략은 클라이언트를 귀하의 인증 URL(구성 가능)로 안내하며, 지정된 ID와 키를 사용합니다.
- OAuth 2.0 공급자는 요청, 사용자 인증을 처리하며, (선택적으로) 사용자의 프로필 접근에 대한 권한을 부여합니다.
- OAuth 2.0 공급자는 클라이언트를 GitLab로 다시 안내하며, 전략이 액세스 토큰을 가져옵니다.
- 전략은 액세스 토큰을 사용하여 구성 가능한 “사용자 프로필” URL에서 사용자 정보를 요청합니다.
- 전략은 구성 가능한 형식을 사용하여 응답에서 사용자 정보를 구문 분석합니다.
- GitLab은 반환된 사용자를 찾거나 생성하고 로그인합니다.
이 전략은:
- 단일 로그인에만 사용될 수 있으며, 다른 OAuth 2.0 공급자가 부여하는 접근을 제공하지 않습니다. 예: 프로젝트 또는 사용자 가져오기.
- GitLab과 같은 클라이언트-서버 응용 프로그램에 가장 일반적인 인증 승인 흐름만 지원합니다.
- 하나의 URL에서만 사용자 정보를 가져올 수 있습니다.
- JWT 형식의 액세스 토큰에서 사용자 정보를 가져올 수 없습니다.
- JSON을 제외한 사용자 정보 형식에 대해서는 테스트되지 않았습니다.
OAuth 2.0 공급자 구성
공급자를 구성하려면:
-
인증할 OAuth 2.0 공급자에 귀하의 애플리케이션을 등록합니다.
애플리케이션을 등록할 때 제공하는 리디렉션 URI는 다음과 같아야 합니다:
http://your-gitlab.host.com/users/auth/oauth2_generic/callback
이제 클라이언트 ID와 클라이언트 비밀을 얻을 수 있어야 합니다. 이러한 값이 나타나는 장소는 공급자마다 다릅니다. 이것은 애플리케이션 ID 및 애플리케이션 비밀이라고도 불릴 수 있습니다.
-
GitLab 서버에서 다음 단계를 완료합니다.
Linux 패키지 (Omnibus)-
공통 설정을 구성하여
oauth2_generic
를 단일 로그인 공급자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 적시 계정 프로비저닝을 가능하게 합니다. -
/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" } } ]
-
파일을 저장하고 GitLab을 재구성합니다:
sudo gitlab-ctl reconfigure
Helm 차트 (Kubernetes)-
공통 설정을 구성하여
oauth2_generic
를 단일 로그인 공급자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 적시 계정 프로비저닝을 가능하게 합니다. -
Helm 값을 내보냅니다:
helm get values gitlab > gitlab_values.yaml
-
다음 내용을
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"
-
Kubernetes Secret을 생성합니다:
kubectl create secret generic -n <namespace> gitlab-oauth2-generic --from-file=provider=oauth2_generic.yaml
-
gitlab_values.yaml
를 편집하고 공급자 구성을 추가합니다:global: appConfig: omniauth: providers: - secret: gitlab-oauth2-generic
-
파일을 저장하고 새로운 값을 적용합니다:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
소스에서 직접 컴파일-
공통 설정을 구성하여
oauth2_generic
를 단일 로그인 공급자로 추가합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 적시 계정 프로비저닝을 가능하게 합니다. -
/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" } }
-
파일을 저장하고 GitLab을 재시작합니다:
# systemd를 사용하는 시스템의 경우 sudo systemctl restart gitlab.target # SysV init을 사용하는 시스템의 경우 sudo service gitlab restart
-
공통 설정을 구성하여
로그인 페이지에는 이제 일반 로그인 양식 아래에 새로운 아이콘이 표시되어야 합니다. 해당 아이콘을 선택하여 공급자의 인증 프로세스를 시작합니다. 이는 브라우저를 귀하의 OAuth 2.0 공급자의 인증 페이지로 안내합니다. 모든 것이 잘 진행되면 귀하는 귀하의 GitLab 인스턴스로 돌아오고 로그인됩니다.