问题标签 [single-logout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
294 浏览

.net - 您如何配置 SP 发起的注销请求以使用 http-post 和sustainsys.saml2?

我试图弄清楚通过 web.config 配置sustainsys.saml2 以发送带有来自SP 的嵌入式签名的注销请求。我的理解是这种类型的 logoutrequest 是使用 http-post 绑定。查看我对 SP 元数据的初始设置,SP 与 http-redirect 绑定,如第一张图所示:

sp元数据中的singlelogoutservice

为什么我想与 http-post 绑定是由于某种原因,IDP(OKTA)在收到注销请求时以“authnfailed”响应。根据我们 MFA 团队的 OKTA 日志,它显示:

用户从应用程序中单点注销

失败:发行者不匹配

根据我们的 MFA 团队,他们是未签署注销请求。经过进一步讨论,IDP 期望签名嵌入到 logoutrequest xml 中,即 http-post。我可以确认 http-redirect 正在请求中发送签名。同时,他们提供的 IDP 元数据似乎可以处理 http-redirect,如第二张图片所示:

来自 IDP 元数据的单一服务

在我使用开发沙箱进行本地开发期间,我没有遇到 http-redirect 问题。这发生在我们的开发/单元测试网络服务器上。所有证书均已设置。我们正在使用来自 xml 文件的本地 IDP 元数据。我只是想尝试绑定 http-post 看看它是否解决了问题,只是似乎无法通过该绑定发送。这是sustainsys配置。

sustainsys web.config 配置

注意我正在为我们的 asp.net 网络表单应用程序使用sustainsys.saml2 httpmodule 设置。

在这个 SP/IDP 世界里,我还是个新手,但肯定学到了很多东西。任何帮助或建议将不胜感激。

0 投票
1 回答
443 浏览

saml - 在 IdP 使用 HTTP 重定向绑定发起注销请求后,用于 SAML 注销响应的 IdP 端点

作为服务提供商,当我们收到来自 IdP 的 HTTP 重定向注销请求时,文档指出我们应该执行以下操作:

验证注销请求 > 使用户会话无效 > 将注销响应发送回身份提供者。

我们将注销响应重定向回哪个端点?我原以为这将是注销请求的一部分,但事实并非如此。它只是 IdP 单一注销 URL 吗?

0 投票
1 回答
253 浏览

asp.net-core - Saml2:我从 IDP 收到注销事件,但哪个用户已注销?

我正在实施一个允许用户使用 SAML2 IDP 登录的 SP。我正在使用 ASP.NET Core 和 Sustainsys Saml2 包实现 SP。我们正在使用 OWIN 中间件。登录效果很好。我添加了一个证书,整个 ting 作为一个 azure 网站运行。我的问题是如果 IDP 发送注销事件,则检测哪个用户已注销。

我们在登录时获得 SessionIndex 和 LogoutNameIdentifier,但在注销时却没有。

在浏览器中使用 SAML2 跟踪器,我看到我从 IDP 收到了一个注销包,如下所示:

在 Startup.cs 中,我为注销事件添加了一个事件处理程序,名为LogoutCommandResultCreated. 它看起来像这样:(有点简化)

commandResult 的 json 序列化的输出并没有给我太多:

  • 这是从 IDP 检测注销事件的正确方法吗?
  • 如何解释 commandResult?
  • 最重要的是,我如何找到已从 IDP 注销的用户?
0 投票
0 回答
120 浏览

single-sign-on - Azure B2C 单一注销在 Edge 或 IE11 中不起作用

我有 3 个使用 AAD B2C 单点登录的 ASP.Net Webforms 站点,它在所有浏览器中都运行良好。但是,我无法在 Edge 或 IE11 中进行单次注销,但单独注销每个站点都可以正常工作。当使用 Chrome 或 Firefox 之类的工具时,它可以完美运行 - 注销一个站点,转到其他站点,然后刷新或单击链接,然后我就退出了。

B2C 中的注销 URL 都设置正确,否则在任何浏览器中都不起作用。我发现,从 Edge 和 IE11 注销时,永远不会发送对每个注销 URL 的请求,因此我在注销页面上完成注销并清除所有会话和 cookie 的代码永远不会触发。我在网上找不到任何东西可以说明为什么会发生这种情况。任何人都可以帮忙吗?

0 投票
1 回答
242 浏览

openid-connect - 确保在身份提供商处注销 - Azure AD b2c、OIDC

我们已经实现了一个使用 Azure AD B2C 和 OpenIdConnect 的 asp.net 解决方案。用户可以使用存储在 azure b2c 中的电子邮件和密码登录。一切都很好。

然后,我们添加了一个外部身份提供者。这使用户能够在电子邮件和密码或身份提供者之间进行选择。登录工作正常,但注销不会传播到身份提供者。

所以现在我有一个在 azure b2c 中正​​确注册注销的场景。但是如果我重新登录并选择身份提供者,我将通过身份提供者进行身份验证而不提供我的凭据,因为我仍然使用身份提供者登录。(如果身份提供者是 google 或 facebook,这可能是首选行为。但在这种情况下,这是一个巨大的安全风险)

我可以看到我的浏览器被重定向到外部身份提供者的结束会话 url。但这不会导致用户被注销。

是否可以从外部身份提供者注销?

可能是什么问题?

0 投票
1 回答
37 浏览

azure-ad-b2c - 单次注销提供 laravel_session,如何将其与我的应用程序中的用户会话匹配

我们已经配置了 azure ad b2c 单一注销功能并向应用程序添加了注销 url。当我们登录此应用程序并登录第二个应用程序,然后从第二个应用程序注销时,Azure AD B2C 成功地向我们配置的注销 url 发送了一个 GET 请求,这很棒。

我们的问题是如何将收到的注销请求与用户会话相关联。注销请求包含以下内容:

我们如何识别应用程序中的用户会话以完成注销?

0 投票
2 回答
379 浏览

single-sign-on - SP 发起的 Single Logout 收到来自 ADFS IDP 的 SAML 注销请求,而不是 SAML 注销响应

我目前与使用 SAML2.0 和 ADFS2.0 的客户端集成。我们是服务提供者,他们是身份提供者。

与单点登录相关的一切都按预期工作,但单点注销有时会表现得很奇怪。对于单次注销,我们发送一个 SAML 注销请求,并期望返回一个 SAML 注销响应来处理我们应用程序的注销。这通常是这种情况,并且一切都正确处理。

但是,我发现了一个问题,即我们使用 SAML 注销请求启动注销,但随后 ADFS 服务器以注销请求作为响应。

重现步骤:

  1. SSO 进入 ADFS 帐户 #1
  2. 在同一浏览器选项卡上,使用 ADFS 帐户 #2 再次启动 SSO。
  3. 在同一浏览器选项卡上,为 ADFS 帐户 #2 启动 SLO。

查看 SAML Tracer,我发现 ADFS 服务器发回的注销请求与 ADFS 帐户 #1 相关联。这怎么可能?我们发送的用于启动 SLO 的注销请求仅包含 ADFS 帐户 #2 的详细信息,与帐户 #1 没有任何关系。

这是正常的 ADFS SLO 行为吗?对我来说,为什么 ADFS 服务器会使用注销请求响应注销请求,并且最重要的是,对于不同的用户,这是没有意义的。我无法用其他 IDP 重新创建此问题。

除了这种情况,SLO 完全可以正常工作,并且会为我们发送的每个注销请求发送一个注销响应。

0 投票
0 回答
149 浏览

adfs - There is no pending identity provider logout request

I'm using ComponentSpace for SSO which is working fine, but it gives error when I try to SendSLO from the SP, where SLO is initiated by the ADFS server (IdP).

The code:

enter image description here

When IdP initiates SLO, first I call ReceiveSLO, then logout from the service provider, at last call SendSLO, but it throws ComponentSpace.SAML2.Exceptions.SAMLProtocolException: 'There is no pending identity provider logout request.'

How can I fix this? If I call IsSendSLOPending, it returns false, why is that?

Thank you.

0 投票
0 回答
224 浏览

react-native - TypeError:null 不是对象(评估 '_firebase.default.auth().currentUser.displayName')

**请帮助任何人。我无法退出 Firebase。它不断给我一个错误。下面是我的代码。** 我已经尝试过当前用户的认证,但是还是说当前用户对象为空,一个用户是一个对象。而且我已经在仪表板类中调用了这个函数,但是如果我单独调用这个 LoginOut 组件,它就可以正常工作。可能是dashboard类中的调用组件有问题,我一头雾水,救命啊?!!

0 投票
0 回答
1270 浏览

spring-boot - 使用 Keycloak 的 Spring-boot 单点注销

描述

我创建了一个使用 Keycloak 12.0.1 作为身份提供者的应用程序。单点登录工作正常,“本地注销”也是如此。

问题是单点注销

我在网上搜索了文档和问题,但一无所获。我有以下日志描述的三种失败场景。

最后的问题是:

  • 我究竟做错了什么?
  • 我必须如何在我的应用程序中实现反向通道注销?

我理解 SSOut 应该如何工作的示例:

  • 用户在 App A 中单击“注销”
  • App A 结束会话
  • 应用 A 通知 Keycloak
  • Keycloak 通过反向通道注销通知 App B
  • 应用 B 结束会话

安全配置

方法 keycloakCsrfRequestMatcher() 将库拥有的端点(如“k_logout”)从 csrf 保护中释放出来,但不是我自己的 url“/sso/logout”。也许可以编写我自己的 Matchers,但这超出了我作为开发人员的经验。

日志 A

正如我们所见,当 KC 尝试访问“/sso/logout” url 时,会出现 CSRF 错误。但我不知道这是否是在 KC 中使用的正确端点?我在使用的库中找到了“/k_logout”,这对我来说似乎是一些“内部重定向”网址。

(为方便起见,删除了日期等。)

日志 B

如果我在 KC 中使用“/k_logout”端点,则会在我的应用程序中收到 JWT Parse 错误。我试图调试它,似乎在 org.keycloak.jose.jws.JWSInput 中,encodedHeader 的前缀是“logout_token =”,这似乎是问题所在。至少对我来说。:-)

日志 C

如果我使用 .csrf().disable() 完全禁用应用程序的 csrf 保护,则上述错误显然不再存在。相反,应用程序无法将注销请求映射到用户。

用于反向通道注销的 Keycloak 配置

密钥斗篷配置

pom.xml