diff --git a/client/galaxy/scripts/components/login/Login.vue b/client/galaxy/scripts/components/login/Login.vue
index e7c37e369d6..b52e46ca6a3 100644
--- a/client/galaxy/scripts/components/login/Login.vue
+++ b/client/galaxy/scripts/components/login/Login.vue
@@ -84,6 +84,7 @@ export default {
const oidc_idps_icons = {
google: "https://developers.google.com/identity/images/btn_google_signin_light_normal_web.png",
elixir: "https://elixir-europe.org/sites/default/files/images/login-button-orange.png",
+ okta: "https://www.okta.com/sites/all/themes/Okta/images/blog/Logos/Okta_Logo_BrightBlue_Medium.png",
};
return {
login: null,
diff --git a/doc/source/admin/authentication.md b/doc/source/admin/authentication.md
index bae80da8d92..bf43f79b982 100644
--- a/doc/source/admin/authentication.md
+++ b/doc/source/admin/authentication.md
@@ -18,7 +18,7 @@ If deploying Galaxy using the default authentication option, user activation can
## OIDC and OAuth2.0
Leveraging OpenID Connect (OIDC) protocol, we enable login to Galaxy without explicitly creating a Galaxy user. This feature is disabled by default. In short, to enable this feature, a Galaxy server admin has to take the following two steps:
-1. Define the Galaxy instance on an OIDC identity provider. At the moment, we support Google. To set a Galaxy instance on Google, go to _credentials_ section at [developers console](https://console.developers.google.com/), and configure the instance. At the end, you'll receive _client ID_ and _client secret_ take a note of these two tokens.
+1. Define the Galaxy instance on an OIDC identity provider. At the moment, we support Google and Okta. To set a Galaxy instance on Google, go to _credentials_ section at [developers console](https://console.developers.google.com/), and configure the instance. At the end, you'll receive _client ID_ and _client secret_ take a note of these two tokens. For Okta, create a new application in Okta, type _web_. At the end you should take note of the _client ID_ and _client secret_ tokens.
2. Configure Galaxy. In the `galaxy.yml` file enable the OIDC service using the `enable_oidc` key and set the two configuration files (i.e., `oidc_config_file` and `oidc_backends_config_file`), based on the IdP information.
diff --git a/lib/galaxy/authnz/managers.py b/lib/galaxy/authnz/managers.py
index 1876bdb82bd..ddaff5decd2 100644
--- a/lib/galaxy/authnz/managers.py
+++ b/lib/galaxy/authnz/managers.py
@@ -121,6 +121,11 @@ class AuthnzManager(object):
'enable_idp_logout': asbool(config_xml.findtext('enable_idp_logout', 'false'))}
if config_xml.find('prompt') is not None:
rtv['prompt'] = config_xml.find('prompt').text
+ if config_xml.find('api_url') is not None:
+ rtv['api_url'] = config_xml.find('api_url').text
+ if config_xml.find('url') is not None:
+ rtv['url'] = config_xml.find('url').text
+
return rtv
def _parse_custos_config(self, config_xml):
diff --git a/lib/galaxy/authnz/psa_authnz.py b/lib/galaxy/authnz/psa_authnz.py
index 61c12f54ff0..75a7f4a72cf 100644
--- a/lib/galaxy/authnz/psa_authnz.py
+++ b/lib/galaxy/authnz/psa_authnz.py
@@ -22,14 +22,16 @@ DEFAULTS = {
BACKENDS = {
'google': 'social_core.backends.google_openidconnect.GoogleOpenIdConnect',
- "globus": "social_core.backends.globus.GlobusOpenIdConnect",
- 'elixir': 'social_core.backends.elixir.ElixirOpenIdConnect'
+ 'globus': 'social_core.backends.globus.GlobusOpenIdConnect',
+ 'elixir': 'social_core.backends.elixir.ElixirOpenIdConnect',
+ 'okta': 'social_core.backends.okta_openidconnect.OktaOpenIdConnect'
}
BACKENDS_NAME = {
'google': 'google-openidconnect',
- "globus": "globus",
- 'elixir': 'elixir'
+ 'globus': 'globus',
+ 'elixir': 'elixir',
+ 'okta': 'okta-openidconnect'
}
AUTH_PIPELINE = (
@@ -126,6 +128,10 @@ class PSAAuthnz(IdentityProvider):
self.config['redirect_uri'] = oidc_backend_config.get('redirect_uri')
if oidc_backend_config.get('prompt') is not None:
self.config[setting_name('AUTH_EXTRA_ARGUMENTS')]['prompt'] = oidc_backend_config.get('prompt')
+ if oidc_backend_config.get('api_url') is not None:
+ self.config[setting_name('API_URL')] = oidc_backend_config.get('api_url')
+ if oidc_backend_config.get('url') is not None:
+ self.config[setting_name('URL')] = oidc_backend_config.get('url')
def _get_helper(self, name, do_import=False):
this_config = self.config.get(setting_name(name), DEFAULTS.get(name, None))
diff --git a/lib/galaxy/config/sample/oidc_backends_config.xml.sample b/lib/galaxy/config/sample/oidc_backends_config.xml.sample
index 6cb60e61193..35af5c0a5d6 100644
--- a/lib/galaxy/config/sample/oidc_backends_config.xml.sample
+++ b/lib/galaxy/config/sample/oidc_backends_config.xml.sample
@@ -110,4 +110,25 @@ Please mind `http` and `https`.
consent
+
+ ...
+ ...
+ http://localhost:8080/authnz/okta/callback
+
+ ...
+
diff --git a/lib/galaxy/dependencies/pipfiles/default/pinned-requirements.txt b/lib/galaxy/dependencies/pipfiles/default/pinned-requirements.txt
index ba38a4adb57..948a30e797e 100644
--- a/lib/galaxy/dependencies/pipfiles/default/pinned-requirements.txt
+++ b/lib/galaxy/dependencies/pipfiles/default/pinned-requirements.txt
@@ -170,7 +170,7 @@ setuptools-scm==3.5.0
shellescape==3.4.1
simplejson==3.17.0
six==1.11.0
-social-auth-core[openidconnect]==3.1.0+gx0
+social-auth-core[openidconnect]==3.3.0
sqlalchemy-migrate==0.13.0
sqlalchemy-utils==0.36.3
sqlalchemy==1.3.16