【问题标题】:从 Grafana iframe 注销 - Keycloak
【发布时间】:2022-01-19 10:57:37
【问题描述】:

我有一个带有 Keycloak 身份验证系统的 Angular 应用程序 (keycloak-angular)

我有一个允许使用 OAuth Keycloak 进行身份验证的 Grafana 服务器

我有一个 Keycloak 服务器,其中有一个名为 master 的领域,以及两个 cliendID ,一个用于我的 angularApp,一个用于我的 grafana 服务器。

在我的 Angular 应用程序中,我显示了一些来自我的 Grafana 服务器的 iframe,并且根据我的实际配置,我的 iframe 直接使用 OAuth 进行身份验证(没有登录屏幕)。

我的 Angular 应用程序中有一个注销按钮来处理 Keycloak 注销,这会将我重定向到 keycloak 登录屏幕。

我的问题是,当我执行 keycloak 注销时,iframe 会话被保存,如果之后我使用其他用户登录,我的 grafana iframe 仍将通过前一个用户进行身份验证。

如果我在 grafana 应用程序或 grafana iframe 中注销,或转到 http://grafana-server:3000/logout ,我将注销 Grafana,grafana iframe 会话将切换到新会话(登录我的 Angular 应用程序的用户)。

我希望 grafana iframe 在我从 Angular 应用程序注销时执行注销,因此下一个登录的用户将不会拥有前一个用户的会话。

Grafana OAuth 部分:

[auth.generic_oauth]
name = OAuth
enabled = true
allow_sign_up = true
client_id = grafana
client_secret = my-secret
scopes = openid email profile
email_attribute_name = email:primary
email_attribute_path = 
login_attribute_path =
name_attribute_path =
role_attribute_path =
id_token_attribute_name =
auth_url = http://keycloak-server/auth/realms/master/protocol/openid-connect/auth
token_url = http://keycloak-server/auth/realms/master/protocol/openid-connect/token
api_url = http://keycloak-server/auth/realms/master/protocol/openid-connect/userinfo
allowed_domains =
team_ids =
allowed_organizations =
tls_skip_verify_insecure = false
tls_client_cert =
tls_client_key =
tls_client_ca =
auto_sign_up = true 

这是 grafana 客户端的 keycloak conf 截图。

反向通道注销网址似乎是解决方案,但我找不到如何正确使用它。

我尝试将此网址设置为“/logout”; "http://grafana-server:3000/logout" ...我不知道如何使它工作。

【问题讨论】:

    标签: iframe oauth keycloak grafana


    【解决方案1】:

    我的结局如下:

    let redirectUrl =`${environment.keycloak.url}/realms/${environment.keycloak.realm}/protocol/openid-connect/logout?redirect_uri=${encodedGrafanaLogoutUrl}`
    keycloakService.logout(redirectUrl) 
    

    当我注销时,我的浏览器会重定向到 grafana 注销 url,但不会再次将我重定向到 angular 应用程序。

    为此,我将 grafana 配置文件的 设置为我的 Angular 应用程序的 url。

    它工作正常,我在登录后被重定向到应用程序。所以我终于不用backchannel注销了。

    问题是现在,从 Grafana 网络应用程序注销会将我重定向到 Angular 应用程序。

    【讨论】:

      【解决方案2】:

      OIDC 注销有redirect_uri 参数,用户在注销后被重定向,因此也可以使用它从 Grafana 注销。所需流量:

      1. Angular logout 将浏览器重定向到 OIDC logout https://keycloak-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=<grafana logout url>(当然grafana logout url 是 URL 参数,所以它必须是 URL 编码的)

      2. 成功退出 OIDC 后的 Keycloak 会将浏览器重定向到 <grafana logout url>(“您的”http://grafana-server:3000/logout),因为它使用 redirect_uri 参数进行了检测

      3. Grafana 执行注销(浏览器中的 Grafana 用户会话将被破坏),浏览器将被重定向到 Grafana 登录页面(当然可以使用 signout_redirect_url config 自定义)

      【讨论】:

      • 它有效,但它给了我另一个问题,在答案帖子中指定。
      • @SonnyJayet 所以如果你接受我的回答会很好,因为它有效。并且在 Angular 应用程序中拥有“再见”路由会很好(无需身份验证即可使用),您可以在最后重定向用户并显示注销成功的好消息。你没有在你的问题中指定,你想在哪里重定向用户,但恕我直言,在 Keycloak 登录页面结束时,我作为用户可能会感到困惑。您可以完全控制signout_redirect_url,最终将重定向用户。
      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 2019-02-24
      • 2018-10-13
      • 2021-05-13
      • 2021-07-12
      • 2019-01-19
      • 2023-02-18
      • 2021-06-06
      相关资源
      最近更新 更多