NSX Advanced Load Balancer 22.1.3 版本支持客户端/信赖方 (RP) 启动的 OpenID 注销。作为 OAuth 客户端 (RP),NSX Advanced Load Balancer 启动请求以将用户代理重定向到 IDP 注销端点,从而指示身份提供程序 (IDP) 注销。

注:

只有在启用了 OIDC 时,RP 启动的注销才适用。

控制器启动的注销流程



控制器启动的注销流程如下所述:

  1. 资源所有者用户单击应用程序提供的注销按钮,然后导航到 NSX Advanced Load Balancer 中配置的注销 URI,例如 /oauth/logout

    注:

    “注销”按钮是由应用程序提供的,而不是由 NSX Advanced Load Balancer 提供的。

  2. 应用程序或浏览器将注销请求发送到 NSX Advanced Load Balancer

  3. NSX Advanced Load Balancer 从会话数据库中清除用户的会话详细信息。

  4. NSX Advanced Load Balancer 将包含无效 Cookie 的重定向请求发送到授权服务器或 IDP(在 NSX Advanced Load Balancer 中配置)的最终会话端点,以清除现有的应用程序或浏览器 Cookie。

     GET https://IDP.com/end_session_endpoint?id_token_hint=id_token_issued_to_client&post_logout_redirect_uri=configured_uri 
  5. 授权服务器/IDP 清除用户的会话详细信息,并且

    1. 管理员必须先在 IDP(例如 okta)端配置 post_logout_redirect_uri,在执行注销后,IDP 将用户重定向到该 URI。

    2. 如果未完成步骤 a,NSX Advanced Load Balancer 将配置 post_logout_redirect_uri

  6. 授权服务器/IDP 重定向到 post_logout_redirect_uri 中的 NSX Advanced Load Balancer 端点。

  7. 用户可以成功注销。

  8. 在成功注销后,用户必须提供凭据才能再次访问资源,并且 NSX Advanced Load Balancer 启动 OAuth 登录流程。

注:

只有在单击注销按钮时客户端发送有效的会话 Cookie 时,上述流程才适用。

URI 端点

RP 启动的注销中的三个 URI 端点如下所示:

注销 URI(必需):

该端点是在 NSX Advanced Load Balancer 中配置的,应用程序中的注销按钮导航到该端点。

结束会话端点(必需):

该端点是在 NSX Advanced Load Balancer 中配置的,并且是由 IDP 提供的。

注销后重定向 URI(建议):

在执行注销后,RP 请求将最终用户的用户代理重定向到的端点 URI。必须在 IDP 和 NSX Advanced Load Balancer 中配置相同的值。

使用 UI 配置 RP 启动的注销

有关 OIDC 的必备配置步骤的更多信息,请参见上面的 OAuth/OIDC 的客户端和资源服务器一节。

导航到应用程序 > 虚拟服务

  1. 单击创建或编辑现有的虚拟服务。

  2. 导航到策略 > 访问

  3. 访问策略下面,选择 OAuth

  4. 配置结束会话端点创建或编辑一个身份验证配置文件



  5. 访问策略下面,在字段中输入详细信息。

  6. 输入注销 URI注销后重定向 URI,如下所示:



  7. 单击保存

使用 CLI 配置 RP 启动的注销

此处说明了 OIDC 的必备配置步骤。

  1. 为 authprofile 的 OAuth oauth_profile 配置 end_session_endpoint 或 IDP 注销 URI(例如 okta)。

     [admin: controller]: > configure authprofile okta-oauth
     [admin: controller]:authprofile > oauth_profile
     [admin: controller]:authprofile:oauth_profile> end_session_endpoint https://dev-477407.oktapreview.com/oauth2/v1/logout
     [admin: controller]:authprofile:oauth_profile>save
     [admin: controller]:authprofile>save
     [admin: controller]:>
    
  2. 使用 configure virtualservice <VS_NAME> 命令配置启用了 OAuth 的虚拟服务,并将 oidc_enable 设置为 true

     [admin: controller] configure virtualservice okta-test 
  3. 在虚拟服务的 oauth_vs_config 子模块下面配置 logout_uripost_logout_redirect_uri

    [admin: controller]:virtualservice> oauth_vs_config
     [admin: controller]:virtualservice:oauth_vs_config> logout_uri https://okta-test.auth.com/oauth/logout
     [admin: controller]:virtualservice:oauth_vs_config> post_logout_redirect_uri https://okta-test.auth.com/
     [admin: controller]:virtualservice:oauth_vs_config> save
     [admin: controller]:virtualservice> save
     [admin: controller]:>
    

输出:

[admin:controller]: virtualservice> oauth_vs_config
[admin:controller]: virtualservice:oauth_vs_config> where
Tenant: admin
Cloud: Default-Cloud
+--------------------------+-------------------------------------------------+
| Field                    | Value                                           |
+--------------------------+-------------------------------------------------+
| redirect_uri             | https://okta-test.auth.com/oauth/callback       |
| cookie_name              | OAUTH_IUPKWGLH                                  |
| cookie_timeout           | 1 min                                           |
| oauth_settings[1]        |                                                 |
|   auth_profile_ref       | okta-oauth                                      |
|   app_settings           |                                                 |
|     oidc_config          |                                                 |
|       oidc_enable        | True                                            |
|       profile            | True                                            |
|       userinfo           | True                                            |
|     client_id            | 0oaubdgcuk6wLEfKq0h7                            |
|     client_secret        | <sensitive>                               |
|   resource_server        |                                                 |
|     access_type          | ACCESS_TOKEN_TYPE_OPAQUE                        |
|     opaque_token_params  |                                                 |
|       server_id          | 0oaubdgcuk6wLEfKq0h7                            |
|       server_secret      | <sensitive>                               |
| key[1]                   |                                                 |
|   name                   | dc7dde0a-8a64-45b4-8ded-f65adb03c2a4            |
|   aes_key                | b'sdZFYlVECVu9aW7XK4IhVaC8TfakvNSvp6m861tyVNc=' |
|     logout_uri           | https://okta-test.auth.com/oauth/logout         |
| post_logout_redirect_uri | https://okta-test.auth.com/                     |

authprofile 下面配置了 end_session_endpoint,如下所示:

[admin:controller]: > show authprofile okta-oauth
+--------------------------+---------------------------------------------------------+
| Field                    | Value                                                   |
+--------------------------+---------------------------------------------------------+
| uuid                     | authprofile-998740b9-5123-4d4d-8fb9-f9f9a3886248        |
| name                     | okta-oauth                                              |
| type                     | AUTH_PROFILE_OAUTH                                      |
| oauth_profile            |                                                         |
|   authorization_endpoint | https://dev-477407.oktapreview.com/oauth2/v1/authorize  |
|   token_endpoint         | https://dev-477407.oktapreview.com/oauth2/v1/token      |
|   introspection_endpoint | https://dev-477407.oktapreview.com/oauth2/v1/introspect |
|   jwks_uri               | https://dev-477407.oktapreview.com/oauth2/v1/keys       |
|   jwks_timeout           | 0 min                                                   |
|   issuer                 | https://dev-477407.oktapreview.com                      |
|   pool_ref               | pool-okta                                               |
|   oauth_resp_buffer_sz   | 1000000                                                 |
|   userinfo_endpoint      | https://dev-477407.oktapreview.com/oauth2/v1/userinfo   |
|   end_session_endpoint   | https://dev-477407.oktapreview.com/oauth2/v1/logout     |
| tenant_ref               | admin                                                   |
+--------------------------+---------------------------------------------------------+
注:
  1. 只有在启用了 OIDC 时,注销 URI 才适用。

  2. 必须配置结束会话端点以配置注销 URI

  3. 如果配置了注销 URI,则不能移除结束会话端点。要移除结束会话端点,则不能为注销 URI 配置任何值。