本节介绍了为应用程序配置基于 SAML 的身份验证的过程。需要使用详细信息(包括重定向 URL 等)在 IdP(例如 Okta 或 PingFederate)中注册该应用程序。这会生成一个需要在 SP(此处为 NSX Advanced Load Balancer 虚拟服务)上配置的 IdP 元数据 XML 文件。
NSX Advanced Load Balancer 支持将断言使用者服务 (Assertion Consumer Service, ACS) URL 和索引发送到 IdP,以作为自动身份验证的一部分。
确保 SSO URL 和实体 ID 在 IdP 和 SP 上匹配,如下所述。
使用 NSX Advanced Load Balancer UI 进行配置
使用以下步骤配置身份验证配置文件:
导航到
。单击创建。
输入身份验证配置文件的名称。
选择 SAML 作为身份验证配置文件的类型。
输入来自您的 IdP 的 IDP 元数据。
为 SAML 服务提供程序设置下面提供的实体类型选项选择使用用户提供的实体 ID。
单击保存。
使用下面显示的步骤创建一个 SSO 策略:
导航到
。输入 SSO 策略的名称。
选择 SAML 以作为 SSO 策略类型。
在默认身份验证配置文件下面,选择创建的 SAML 身份验证配置文件。
单击保存。
使用以下步骤将 SSO 策略绑定到虚拟服务:
导航到
。单击一个虚拟服务的编辑图标以打开编辑虚拟服务屏幕。或者,也可以在创建模式下为新虚拟服务执行该配置。
在策略选项卡下面,选择访问。
选择创建的 SSO 策略。
输入唯一的值以作为实体 ID。确保该值在 IdP 和 SP 上是相同的。
输入以下 URL 作为 SSO URL: https://SPresource/sso/acs/。确保在 IdP 中也使用相同的 URL。例如,https://sales.avi.com/sso/acs/。
注:acs
后面的尾随斜杠是必需的。在会话 Cookie 名称字段中,输入经过身份验证的会话的 HTTP Cookie 名称。NSX Advanced Load Balancer 验证断言并为客户端设置 Cookie。客户端发送
GET
请求以使用 SP 提供的 Cookie 访问资源。可以对 Cookie 名称进行配置,并通过该字段指定 Cookie 名称。如果未指定名称,NSX Advanced Load Balancer VS 将使用随机生成的 Cookie 名称,例如 XRWDFG。要自定义 Cookie 过期时间,请输入会话 Cookie 超时(以分钟为单位)。默认值为 60 分钟。
在 SSL 密钥字段中,选择或创建一个 SSL 证书。该 SSL 证书用于对发送到 IdP 的请求进行签名,并解密来自 IdP 的断言。
从 ACS 类型中选择一个选项,以允许 NSX Advanced Load Balancer 将 ACS URL 或 ACS 索引作为身份验证请求的一部分发送到 IdP,或者不发送 ACS URL 和 ACS 索引。在允许配置多个 ACS URL 的某些 IDP 中,IDP 使用 ACS 索引或 ACS URL 以标识服务提供程序。三个 ACS 类型选项如下所示:
None - 这是默认行为。如果 ACS 类型设置为“无”,则 NSX Advanced Load Balancer 不会在身份验证请求中将 ACS URL 或 ACS 索引发送到 IdP。
URL - ACS URL 按值指定 IdP 必须将 SAML 响应返回到 SP (NSX Advanced Load Balancer) 的位置。如果选择了 ACS URL,则 NSX Advanced Load Balancer 将 ACS URL 作为身份验证请求的一部分发送到 IdP。然后,IdP 使用 ACS URL 将 SAML 响应发回到 SP。
注:ACS URL 的值与上面配置的 SSO URL 相同。
Index - 与 ACS URL 类似,IdP 使用 ACS 索引指定必须将 SAML 响应返回到 SP 的位置。如果指定了 ACS 索引,则 NSX Advanced Load Balancer 将 ACS 索引作为身份验证请求的一部分进行发送。ACS 索引的范围是 0-64。其中,
0 表示索引为 0
1 表示索引为 1,依此类推
单击保存。
使用 NSX Advanced Load Balancer CLI 进行配置
使用下面显示的 CLI 命令配置身份验证配置文件:
[admin:saml-ctrlr-1]: > configure authprofile Saml-auth-profile [admin:saml-ctrlr-1]: authprofile> type auth_profile_saml [admin:saml-ctrlr-1]: authprofile> saml [admin:saml-ctrlr-1]: authprofile:saml> sp [admin:saml-ctrlr-1]: authprofile:saml:sp> saml_entity_type auth_saml_app_vs [admin:saml-ctrlr-1]: authprofile:saml:sp> save [admin:saml-ctrlr-1]: authprofile:saml> save [admin:saml-ctrlr-1]: authprofile> saml [admin:saml-ctrlr-1]: authprofile:saml> new idp metadata : ‘metadata_string’
下面显示了一个示例配置:
metadata: ‘<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="http://www.okta.com/exk2c02xxTcM9pIr0355"><md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDtjCCAp6gAwIBAgIGAWPuJWSOMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYDVQQGEwJVUzETMBEG A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU MBIGA1UECwwLU1NPUHJvdmlkZXIxHDAaBgNVBAMME2F2aW5ldHdvcmtzLWF1dGhsYWIxHDAaBgkq hkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTgwNjExMDkxOTE4WhcNMjgwNjExMDkyMDE3WjCB mzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lz Y28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRwwGgYDVQQDDBNhdmluZXR3 b3Jrcy1hdXRobGFiMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAiFKBy70aa5G2I5JH+uUqXef9jrhUtx6CX1nmrg26FXtsKYdjRm5v otxbjfNdcXeXRXHu5scMwAgMy9EZM+AXehlm/qnahNWvEZ+YgPZS55UzkcSXJ30dl62kbUAyXxo3 CQQs+Hj5k7W0rcZAj405qxOZVgtkrs6cB3uS/pn02eV4EHA6ECReQLrEPFcy6zLZpIChbkzyz372 ZLbwMCSjF5DLh52MSGgWixwvs5Mq20WofBWMOnS0ofnZq6+TM6XK7P8VEQxJe37sWi0W+RrR6685 T+bnlM6GMg24wRHt/1fouUbZQuBgoc0/HNKywlO9BXLoJ9j02/VYn3Uex9bumQIDAQABMA0GCSqG SIb3DQEBCwUAA4IBAQAmAh0fXL7gU1ivV3hWdl0AlLPENREAzKbHwuthtTySBr6rmreo6j8SvOMW pKQzNznmzU3zyeLd96j6lfA7PIDGyBGmNB6z0Va0bPvOQe+a2f3/cmumVdrKFv7I5ZiR0UNbeBmG BIeWkJ+Rx+FcaIzP2IiFddmvpdh1nLae7FS9F1jvnioSIwq2PlFZuMMFb2TrMXrqqEMp9CeGfEag bjxQcWEW1ifNxeKrI/LcS5g5mTf4gx41bgo/w9x6MRsK+bIbYv680mdtb6LhWiT1lZU+ZAYJTKMr HHoIxYFPW8Zcs7DGirOOYMbSU97G0rljQzbv9gcS+FhwPffBaHi3spk9</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://avinetworks-authlab.okta.com/app/avinetworksorg108212_apmssotest_1/exk2c02xxTcM9pIr0355/sso/saml"/><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://avinetworks-authlab.okta.com/app/avinetworksorg108212_apmssotest_1/exk2c02xxTcM9pIr0355/sso/saml"/></md:IDPSSODescriptor></md:EntityDescriptor>’
使用两个 save 命令以完成 CLI 序列。
[admin:saml-ctrlr-1]: authprofile:saml> save [admin:saml-ctrlr-1]: authprofile> save +----------------------+------------------------------------------------+ | Field | Value +----------------------+------------------------------------------------+ | uuid | authprofile-789ce4af-6b9d-4a73-bd26-d00f670a19c0 | | name | Saml-auth-profile | | type | AUTH_PROFILE_SAML | | saml | | | idp | | | metadata | <?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:n | | | ames:tc:SAML:2.0:metadata" entityID="http://www.okta.com/exk2c02xxTcM9pIr0355">< | | | md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration=" | | | urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInf | | | o xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate | | | >MIIDtjCCAp6gAwIBAgIGAWPuJWSOMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYDVQQGEwJVUzETMBEG A1 | | | UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU MBIGA | | | 1UECwwLU1NPUHJvdmlkZXIxHDAaBgNVBAMME2F2aW5ldHdvcmtzLWF1dGhsYWIxHDAaBgkq hkiG9w0B | | | CQEWDWluZm9Ab2t0YS5jb20wHhcNMTgwNjExMDkxOTE4WhcNMjgwNjExMDkyMDE3WjCB mzELMAkGA1U | | | EBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lz Y28xDTALBgNVBA | | | oMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRwwGgYDVQQDDBNhdmluZXR3 b3Jrcy1hdXRobGFiM | | | RwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKC | | | AQEAiFKBy70aa5G2I5JH+uUqXef9jrhUtx6CX1nmrg26FXtsKYdjRm5v otxbjfNdcXeXRXHu5scMwAg | | | My9EZM+AXehlm/qnahNWvEZ+YgPZS55UzkcSXJ30dl62kbUAyXxo3 CQQs+Hj5k7W0rcZAj405qxOZVg | | | tkrs6cB3uS/pn02eV4EHA6ECReQLrEPFcy6zLZpIChbkzyz372 ZLbwMCSjF5DLh52MSGgWixwvs5Mq2 | | | 0WofBWMOnS0ofnZq6+TM6XK7P8VEQxJe37sWi0W+RrR6685 T+bnlM6GMg24wRHt/1fouUbZQuBgoc0/ | | | HNKywlO9BXLoJ9j02/VYn3Uex9bumQIDAQABMA0GCSqG SIb3DQEBCwUAA4IBAQAmAh0fXL7gU1ivV3h | | | Wdl0AlLPENREAzKbHwuthtTySBr6rmreo6j8SvOMW pKQzNznmzU3zyeLd96j6lfA7PIDGyBGmNB6z0V | | | a0bPvOQe+a2f3/cmumVdrKFv7I5ZiR0UNbeBmG BIeWkJ+Rx+FcaIzP2IiFddmvpdh1nLae7FS9F1jvn | | | ioSIwq2PlFZuMMFb2TrMXrqqEMp9CeGfEag bjxQcWEW1ifNxeKrI/LcS5g5mTf4gx41bgo/w9x6MRsK | | | +bIbYv680mdtb6LhWiT1lZU+ZAYJTKMr HHoIxYFPW8Zcs7DGirOOYMbSU97G0rljQzbv9gcS+FhwPff | | | BaHi3spk9</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md: | | | NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFor | | | mat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md: | | | NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindin | | | gs:HTTP-POST" Location="https://avinetworks-authlab.okta.com/app/avinetworksorg1 | | | 08212_apmssotest_1/exk2c02xxTcM9pIr0355/sso/saml"/><md:SingleSignOnService Bindi | | | ng="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://avinet | | | works-authlab.okta.com/app/avinetworksorg108212_apmssotest_1/exk2c02xxTcM9pIr035 | | | 5/sso/saml"/></md:IDPSSODescriptor></md:EntityDescriptor> | | sp | | | saml_entity_type | AUTH_SAML_APP_VS | | tenant_ref | admin | +----------------------+------------------------------------------------+ [admin:saml-ctrlr-1]: >
使用以下代码配置 SSO 策略:
[admin:saml-ctrlr-1]: configure ssopolicy saml_ssopolicy [admin:saml-ctrlr-1]: ssopolicy> authentication_policy default_auth_profile_ref Saml-auth-profile [admin:saml-ctrlr-1]: ssopolicy:authentication_policy> save [admin:saml-ctrlr-1]: ssopolicy> save +----------------------------+------------------------------------------+ | Field | Value +----------------------------+------------------------------------------+ | uuid | ssopolicy-23bf7f51-d95a-4f1d-9dbb-648dd7ad11e6 | | name | saml_ssopolicy | authentication_policy | | default_auth_profile_ref | Saml-auth-profile | tenant_ref | admin +----------------------------+------------------------------------------+
使用下面显示的步骤配置虚拟服务:
绑定 SSO 策略
[admin:saml-ctrlr-1]: > configure virtualservice VS-SAML Updating an existing object. Currently, the object is: < Object specifics would appear here. Left out of article for brevity's sake. > [admin:10-30-2-30]: virtualservice> sso_policy_ref saml_ssopolicy
配置 SP
[admin:saml-ctrlr-1]: virtualservice> saml_sp_config [admin:saml-ctrlr-1]: virtualservice:saml_sp_config> single_signon_url https://sales.avi.com/sso/acs/ [admin:saml-ctrlr-1]: virtualservice:saml_sp_config> entity_id SAML_app [admin:saml-ctrlr-1]: virtualservice:saml_sp_config> cookie_name MyCookie [admin:saml-ctrlr-1]: virtualservice:saml_sp_config> cookie_timeout 60 [admin:saml-ctrlr-1]: virtualservice:saml_sp_config> save [admin:saml-ctrlr-1]: virtualservice> save