问题标签 [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.
.net - 您如何配置 SP 发起的注销请求以使用 http-post 和sustainsys.saml2?
我试图弄清楚通过 web.config 配置sustainsys.saml2 以发送带有来自SP 的嵌入式签名的注销请求。我的理解是这种类型的 logoutrequest 是使用 http-post 绑定。查看我对 SP 元数据的初始设置,SP 与 http-redirect 绑定,如第一张图所示:
为什么我想与 http-post 绑定是由于某种原因,IDP(OKTA)在收到注销请求时以“authnfailed”响应。根据我们 MFA 团队的 OKTA 日志,它显示:
用户从应用程序中单点注销
失败:发行者不匹配
根据我们的 MFA 团队,他们是未签署注销请求。经过进一步讨论,IDP 期望签名嵌入到 logoutrequest xml 中,即 http-post。我可以确认 http-redirect 正在请求中发送签名。同时,他们提供的 IDP 元数据似乎可以处理 http-redirect,如第二张图片所示:
在我使用开发沙箱进行本地开发期间,我没有遇到 http-redirect 问题。这发生在我们的开发/单元测试网络服务器上。所有证书均已设置。我们正在使用来自 xml 文件的本地 IDP 元数据。我只是想尝试绑定 http-post 看看它是否解决了问题,只是似乎无法通过该绑定发送。这是sustainsys配置。
注意我正在为我们的 asp.net 网络表单应用程序使用sustainsys.saml2 httpmodule 设置。
在这个 SP/IDP 世界里,我还是个新手,但肯定学到了很多东西。任何帮助或建议将不胜感激。
saml - 在 IdP 使用 HTTP 重定向绑定发起注销请求后,用于 SAML 注销响应的 IdP 端点
作为服务提供商,当我们收到来自 IdP 的 HTTP 重定向注销请求时,文档指出我们应该执行以下操作:
验证注销请求 > 使用户会话无效 > 将注销响应发送回身份提供者。
我们将注销响应重定向回哪个端点?我原以为这将是注销请求的一部分,但事实并非如此。它只是 IdP 单一注销 URL 吗?
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 注销的用户?
single-sign-on - Azure B2C 单一注销在 Edge 或 IE11 中不起作用
我有 3 个使用 AAD B2C 单点登录的 ASP.Net Webforms 站点,它在所有浏览器中都运行良好。但是,我无法在 Edge 或 IE11 中进行单次注销,但单独注销每个站点都可以正常工作。当使用 Chrome 或 Firefox 之类的工具时,它可以完美运行 - 注销一个站点,转到其他站点,然后刷新或单击链接,然后我就退出了。
B2C 中的注销 URL 都设置正确,否则在任何浏览器中都不起作用。我发现,从 Edge 和 IE11 注销时,永远不会发送对每个注销 URL 的请求,因此我在注销页面上完成注销并清除所有会话和 cookie 的代码永远不会触发。我在网上找不到任何东西可以说明为什么会发生这种情况。任何人都可以帮忙吗?
openid-connect - 确保在身份提供商处注销 - Azure AD b2c、OIDC
我们已经实现了一个使用 Azure AD B2C 和 OpenIdConnect 的 asp.net 解决方案。用户可以使用存储在 azure b2c 中的电子邮件和密码登录。一切都很好。
然后,我们添加了一个外部身份提供者。这使用户能够在电子邮件和密码或身份提供者之间进行选择。登录工作正常,但注销不会传播到身份提供者。
所以现在我有一个在 azure b2c 中正确注册注销的场景。但是如果我重新登录并选择身份提供者,我将通过身份提供者进行身份验证而不提供我的凭据,因为我仍然使用身份提供者登录。(如果身份提供者是 google 或 facebook,这可能是首选行为。但在这种情况下,这是一个巨大的安全风险)
我可以看到我的浏览器被重定向到外部身份提供者的结束会话 url。但这不会导致用户被注销。
是否可以从外部身份提供者注销?
可能是什么问题?
azure-ad-b2c - 单次注销提供 laravel_session,如何将其与我的应用程序中的用户会话匹配
我们已经配置了 azure ad b2c 单一注销功能并向应用程序添加了注销 url。当我们登录此应用程序并登录第二个应用程序,然后从第二个应用程序注销时,Azure AD B2C 成功地向我们配置的注销 url 发送了一个 GET 请求,这很棒。
我们的问题是如何将收到的注销请求与用户会话相关联。注销请求包含以下内容:
我们如何识别应用程序中的用户会话以完成注销?
single-sign-on - SP 发起的 Single Logout 收到来自 ADFS IDP 的 SAML 注销请求,而不是 SAML 注销响应
我目前与使用 SAML2.0 和 ADFS2.0 的客户端集成。我们是服务提供者,他们是身份提供者。
与单点登录相关的一切都按预期工作,但单点注销有时会表现得很奇怪。对于单次注销,我们发送一个 SAML 注销请求,并期望返回一个 SAML 注销响应来处理我们应用程序的注销。这通常是这种情况,并且一切都正确处理。
但是,我发现了一个问题,即我们使用 SAML 注销请求启动注销,但随后 ADFS 服务器以注销请求作为响应。
重现步骤:
- SSO 进入 ADFS 帐户 #1
- 在同一浏览器选项卡上,使用 ADFS 帐户 #2 再次启动 SSO。
- 在同一浏览器选项卡上,为 ADFS 帐户 #2 启动 SLO。
查看 SAML Tracer,我发现 ADFS 服务器发回的注销请求与 ADFS 帐户 #1 相关联。这怎么可能?我们发送的用于启动 SLO 的注销请求仅包含 ADFS 帐户 #2 的详细信息,与帐户 #1 没有任何关系。
这是正常的 ADFS SLO 行为吗?对我来说,为什么 ADFS 服务器会使用注销请求响应注销请求,并且最重要的是,对于不同的用户,这是没有意义的。我无法用其他 IDP 重新创建此问题。
除了这种情况,SLO 完全可以正常工作,并且会为我们发送的每个注销请求发送一个注销响应。
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:
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.
react-native - TypeError:null 不是对象(评估 '_firebase.default.auth().currentUser.displayName')
**请帮助任何人。我无法退出 Firebase。它不断给我一个错误。下面是我的代码。** 我已经尝试过当前用户的认证,但是还是说当前用户对象为空,一个用户是一个对象。而且我已经在仪表板类中调用了这个函数,但是如果我单独调用这个 LoginOut 组件,它就可以正常工作。可能是dashboard类中的调用组件有问题,我一头雾水,救命啊?!!
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 保护,则上述错误显然不再存在。相反,应用程序无法将注销请求映射到用户。