Merge pull request #1341 from zoetrope/specify-nameid-format-in-saml

Add: support for specifying SAML nameid-format
This commit is contained in:
Arik Fraimovich 2016-10-21 08:17:11 +03:00 committed by GitHub
commit 3db0eea921
4 changed files with 12 additions and 1 deletions

View File

@ -13,6 +13,10 @@ and add REDASH_SAML_LOCAL_METADATA_PATH instead of REDASH_SAML_METADATA_URL, eg
And an optional REDASH_SAML_CALLBACK_SERVER_NAME which contains the And an optional REDASH_SAML_CALLBACK_SERVER_NAME which contains the
server name of the redash server for the callbacks from the SAML provider (eg demo.redash.io) server name of the redash server for the callbacks from the SAML provider (eg demo.redash.io)
And if you want to specify nameid format, add REDASH_SAML_NAMEID_FORMAT config value,
eg urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
default is urn:oasis:names:tc:SAML:2.0:nameid-format:transient
If you want to specify entityid in AuthnRequest, If you want to specify entityid in AuthnRequest,
add REDASH_SAML_ENTITY_ID config value, eg http://demo.redash.io/saml/callback add REDASH_SAML_ENTITY_ID config value, eg http://demo.redash.io/saml/callback

View File

@ -30,6 +30,7 @@ The follow is a list of settings and what they control:
- **REDASH_SAML_METADATA_URL**: *default ""* - **REDASH_SAML_METADATA_URL**: *default ""*
- **REDASH_SAML_LOCAL_METADATA_PATH**: *default ""* - **REDASH_SAML_LOCAL_METADATA_PATH**: *default ""*
- **REDASH_SAML_CALLBACK_SERVER_NAME**: *default ""* - **REDASH_SAML_CALLBACK_SERVER_NAME**: *default ""*
- **REDASH_SAML_NAMEID_FORMAT**: *default ""*
- **REDASH_SAML_ENTITY_ID**: *default ""* - **REDASH_SAML_ENTITY_ID**: *default ""*
- **REDASH_STATIC_ASSETS_PATH**: *default "../rd_ui/app/"* - **REDASH_STATIC_ASSETS_PATH**: *default "../rd_ui/app/"*
- **REDASH_JOB_EXPIRY_TIME**: *default 3600 * 6* - **REDASH_JOB_EXPIRY_TIME**: *default 3600 * 6*

View File

@ -7,6 +7,7 @@ from redash import settings
from saml2 import BINDING_HTTP_POST, BINDING_HTTP_REDIRECT, entity from saml2 import BINDING_HTTP_POST, BINDING_HTTP_REDIRECT, entity
from saml2.client import Saml2Client from saml2.client import Saml2Client
from saml2.config import Config as Saml2Config from saml2.config import Config as Saml2Config
from saml2.saml import NAMEID_FORMAT_TRANSIENT
logger = logging.getLogger('saml_auth') logger = logging.getLogger('saml_auth')
@ -112,7 +113,11 @@ def sp_initiated():
return redirect(url_for('redash.index')) return redirect(url_for('redash.index'))
saml_client = get_saml_client() saml_client = get_saml_client()
reqid, info = saml_client.prepare_for_authenticate() if settings.SAML_NAMEID_FORMAT != "":
nameid_format = settings.SAML_NAMEID_FORMAT
else:
nameid_format = NAMEID_FORMAT_TRANSIENT
reqid, info = saml_client.prepare_for_authenticate(nameid_format=nameid_format)
redirect_url = None redirect_url = None
# Select the IdP URL to send the AuthN request to # Select the IdP URL to send the AuthN request to

View File

@ -92,6 +92,7 @@ SAML_ENTITY_ID = os.environ.get("REDASH_SAML_ENTITY_ID", "")
SAML_METADATA_URL = os.environ.get("REDASH_SAML_METADATA_URL", "") SAML_METADATA_URL = os.environ.get("REDASH_SAML_METADATA_URL", "")
SAML_LOCAL_METADATA_PATH = os.environ.get("REDASH_SAML_LOCAL_METADATA_PATH", "") SAML_LOCAL_METADATA_PATH = os.environ.get("REDASH_SAML_LOCAL_METADATA_PATH", "")
SAML_LOGIN_ENABLED = SAML_METADATA_URL != "" or SAML_LOCAL_METADATA_PATH != "" SAML_LOGIN_ENABLED = SAML_METADATA_URL != "" or SAML_LOCAL_METADATA_PATH != ""
SAML_NAMEID_FORMAT = os.environ.get("REDASH_SAML_NAMEID_FORMAT", "")
SAML_CALLBACK_SERVER_NAME = os.environ.get("REDASH_SAML_CALLBACK_SERVER_NAME", "") SAML_CALLBACK_SERVER_NAME = os.environ.get("REDASH_SAML_CALLBACK_SERVER_NAME", "")
# Enables the use of an externally-provided and trusted remote user via an HTTP # Enables the use of an externally-provided and trusted remote user via an HTTP