Skip to content

Commit c742614

Browse files
committed
feat: Add support for Omniauth JWT login
1 parent 0d39d55 commit c742614

File tree

4 files changed

+66
-3
lines changed

4 files changed

+66
-3
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
- [Microsoft Azure](#microsoft-azure)
4848
- [Generic OAuth2](#Generic-OAuth2)
4949
- [OpenID Connect](#openid-connect)
50+
- [JWT](#jwt)
5051
- [Gitlab Pages](#gitlab-pages)
5152
- [External Issue Trackers](#external-issue-trackers)
5253
- [Host UID / GID Mapping](#host-uid--gid-mapping)
@@ -756,6 +757,27 @@ To use OIDC set at least `OAUTH_OIDC_ISSUER` and `OAUTH_OIDC_CLIENT_ID`.
756757

757758
See [GitLab OIDC documentation](https://docs.gitlab.com/ee/administration/auth/oidc.html) and [OmniAuth OpenID Connect documentation](https://github.com/omniauth/omniauth_openid_connect/).
758759

760+
##### JWT
761+
762+
To enable the JWT OmniAuth provider, you must register your application with JWT. JWT provides you with a secret key for you to use.
763+
764+
To use JWT set at least `OAUTH_JWT_SECRET` and `OAUTH_JWT_AUTH_URL`.
765+
766+
| GitLab setting | environment variable | default value |
767+
| ------------------------------ | ----------------------------------- | -------------------------------|
768+
| `label` | `OAUTH_JWT_LABEL` | `Jwt` |
769+
| `secret` | `OAUTH_JWT_SECRET` | |
770+
| `algorithm` | `OAUTH_JWT_ALGORITHM` | `HS256` |
771+
| `uid_claim` | `OAUTH_JWT_UID_CLAIM` | `email` |
772+
| `required_claims` | `OAUTH_JWT_REQUIRED_CLAIMS` | `["name", "email"]` |
773+
| `info_map.name` | `OAUTH_JWT_INFO_MAP_NAME` | `name` |
774+
| `info_map.email` | `OAUTH_JWT_INFO_MAP_EMAIL` | `email` |
775+
| `auth_url` | `OAUTH_JWT_AUTH_URL` | |
776+
| `valid_within` | `OAUTH_JWT_VALID_WITHIN` | `3600` |
777+
778+
779+
See [OmniAuth JWT documentation](https://docs.gitlab.com/administration/auth/jwt/).
780+
759781
#### Gitlab Pages
760782

761783
Gitlab Pages allows a user to host static websites from a project. Gitlab pages can be enabled with setting the environment variable `GITLAB_PAGES_ENABLED` to `true`.

assets/runtime/config/gitlabhq/gitlab.yml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,7 @@ production: &base
937937
login_url: '{{OAUTH_CAS3_LOGIN_URL}}',
938938
service_validate_url: '{{OAUTH_CAS3_VALIDATE_URL}}',
939939
logout_url: '{{OAUTH_CAS3_LOGOUT_URL}}'} }
940-
- { name: 'authentiq',
940+
- { name: 'authentiq',
941941
app_id: '{{OAUTH_AUTHENTIQ_CLIENT_ID}}',
942942
app_secret: 'OAUTH_AUTHENTIQ_CLIENT_SECRET',
943943
args: { scope: {{OAUTH_AUTHENTIQ_SCOPE}}, redirect_uri: '{{OAUTH_AUTHENTIQ_REDIRECT_URI}}' } }
@@ -1048,7 +1048,16 @@ production: &base
10481048
identifier: '{{OAUTH_OIDC_CLIENT_ID}}',
10491049
secret: '{{OAUTH_OIDC_CLIENT_SECRET}}',
10501050
redirect_uri: '{{OAUTH_OIDC_REDIRECT_URI}}' } } }
1051-
1051+
- { name: 'jwt',
1052+
label: '{{OAUTH_JWT_LABEL}}',
1053+
args: {
1054+
secret: '{{OAUTH_JWT_SECRET}}',
1055+
algorithm: '{{OAUTH_JWT_ALGORITHM}}',
1056+
uid_claim: '{{OAUTH_JWT_UID_CLAIM}}',
1057+
required_claims: {{OAUTH_JWT_REQUIRED_CLAIMS}},
1058+
info_map: { name: '{{OAUTH_JWT_INFO_MAP_NAME}}', email: '{{OAUTH_JWT_INFO_MAP_EMAIL}}' },
1059+
auth_url: '{{OAUTH_JWT_AUTH_URL}}',
1060+
valid_within: {{OAUTH_JWT_VALID_WITHIN}} } }
10521061
# SSO maximum session duration in seconds. Defaults to CAS default of 8 hours.
10531062
# cas3:
10541063
# session_duration: 28800

assets/runtime/env-defaults

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,17 @@ case $GITLAB_HTTPS in
559559
;;
560560
esac
561561

562+
### JWT
563+
OAUTH_JWT_LABEL=${OAUTH_JWT_LABEL:-'Jwt'}
564+
OAUTH_JWT_SECRET=${OAUTH_JWT_SECRET:-}
565+
OAUTH_JWT_ALGORITHM=${OAUTH_JWT_ALGORITHM:-'HS256'}
566+
OAUTH_JWT_UID_CLAIM=${OAUTH_JWT_UID_CLAIM:-'email'}
567+
OAUTH_JWT_REQUIRED_CLAIMS=${OAUTH_JWT_REQUIRED_CLAIMS:-'["name", "email"]'}
568+
OAUTH_JWT_INFO_MAP_NAME=${OAUTH_JWT_INFO_MAP_NAME:-'name'}
569+
OAUTH_JWT_INFO_MAP_EMAIL=${OAUTH_JWT_INFO_MAP_EMAIL:-'email'}
570+
OAUTH_JWT_AUTH_URL=${OAUTH_JWT_AUTH_URL:-}
571+
OAUTH_JWT_VALID_WITHIN=${OAUTH_JWT_VALID_WITHIN:-3600}
572+
562573
## ANALYTICS
563574

564575
### GOOGLE

assets/runtime/functions

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,26 @@ gitlab_configure_oauth_oidc() {
821821
fi
822822
}
823823

824+
gitlab_configure_oauth_jwt() {
825+
if [[ -n ${OAUTH_JWT_SECRET} && \
826+
-n ${OAUTH_JWT_AUTH_URL} ]]; then
827+
echo "Configuring gitlab::oauth::jwt..."
828+
OAUTH_ENABLED=${OAUTH_ENABLED:-true}
829+
update_template ${GITLAB_CONFIG} \
830+
OAUTH_JWT_LABEL \
831+
OAUTH_JWT_SECRET \
832+
OAUTH_JWT_ALGORITHM \
833+
OAUTH_JWT_UID_CLAIM \
834+
OAUTH_JWT_REQUIRED_CLAIMS \
835+
OAUTH_JWT_INFO_MAP_NAME \
836+
OAUTH_JWT_INFO_MAP_EMAIL \
837+
OAUTH_JWT_AUTH_URL \
838+
OAUTH_JWT_VALID_WITHIN
839+
else
840+
exec_as_git sed -i "/name: 'jwt'/,/{{OAUTH_JWT_VALID_WITHIN}}/d" ${GITLAB_CONFIG}
841+
fi
842+
}
843+
824844
gitlab_configure_oauth() {
825845
echo "Configuring gitlab::oauth..."
826846

@@ -839,6 +859,7 @@ gitlab_configure_oauth() {
839859
gitlab_configure_oauth_azure
840860
gitlab_configure_oauth_azure_ad_v2
841861
gitlab_configure_oauth_oidc
862+
gitlab_configure_oauth_jwt
842863

843864
OAUTH_ENABLED=${OAUTH_ENABLED:-false}
844865
update_template ${GITLAB_CONFIG} \
@@ -852,7 +873,7 @@ gitlab_configure_oauth() {
852873
OAUTH_ALLOW_BYPASS_TWO_FACTOR
853874

854875
case ${OAUTH_AUTO_SIGN_IN_WITH_PROVIDER} in
855-
cas3|google_oauth2|facebook|twitter|github|gitlab|bitbucket|saml|crowd|azure_oauth2|azure_activedirectory_v2|oauth2_generic|$OAUTH2_GENERIC_NAME|oidc)
876+
cas3|google_oauth2|facebook|twitter|github|gitlab|bitbucket|saml|crowd|azure_oauth2|azure_activedirectory_v2|oauth2_generic|$OAUTH2_GENERIC_NAME|oidc|jwt)
856877
update_template ${GITLAB_CONFIG} OAUTH_AUTO_SIGN_IN_WITH_PROVIDER
857878
;;
858879
*)

0 commit comments

Comments
 (0)