当前位置: 首页 > 知识库问答 >
问题:

从外部提供商注销后,Identity Server登录流卡住

昌乐生
2023-03-14

我使用的是Identity Server 4,3.1.1版本,当外部提供者使用WS-Federation时,我从SPA客户端注销后出现了一种奇怪的行为。我目前使用ADFS作为外部提供程序,它是按照本指南配置的:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/ws-federation?view=aspnetcore-3.1

细节

当用户注销时,会发生这样的情况:外部提供商的注销受到挑战-

问题我跟踪了请求重定向,它们让我在Account tController(Quickstart UI)上找到以下代码

225 [HttpPost]
226 [ValidateAntiForgeryToken]
227 public async Task<IActionResult> Logout(LogoutInputModel model)
228 {
229    // build a model so the logged out page knows what to display
230    var vm = await BuildLoggedOutViewModelAsync(model.LogoutId);
231
232    if (User?.Identity.IsAuthenticated == true)
233    {
234        // delete local authentication cookie
235        await _signInManager.SignOutAsync();
236
237        // raise the logout event
238        await _events.RaiseAsync(new UserLogoutSuccessEvent(User.GetSubjectId(), User.GetDisplayName()));
239    }
240
241    // check if we need to trigger sign-out at an upstream identity provider
242    if (vm.TriggerExternalSignout)
243    {
244        // build a return URL so the upstream provider will redirect back
245        // to us after the user has logged out. this allows us to then
246        // complete our single sign-out processing.
247        string url = Url.Action("Logout", new { logoutId = vm.LogoutId });
248
249        // this triggers a redirect to the external provider for sign-out
250        return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);
251     }
252
253    return View("LoggedOut", vm);
254 }

当用户注销时,将到达第250行,并使用指向 /Account/Logout的重定向url调用外部供应商的注销。logoutId={logout-id}但是当该请求到达时,用户已经从身份服务器注销,显然是因为在重定向到ADFS之前在第235行调用了注销,因此,在处理重定向时身份验证受到挑战,用户被重定向到 /Login页面。

我需要以不同的方式配置以正确处理最后一次重定向?我想这不是身份服务器的错误,但这意味着注销流程不会像我预期的那样工作,那么这个注销流程将如何工作?我在github上发布了一个类似的问题,但到目前为止还没有答案:https://github.com/IdentityServer/IdentityServer4/issues/5204

提前感谢

共有1个答案

卫子平
2023-03-14

对Logout的GET请求应允许匿名请求。

 类似资料:
  • 我们的javaspring应用程序(sp)允许客户端进行SSO集成。我们计划引入SLO(单点注销)作为安全审计要求的一部分。 我有一个疑问,如果我们的应用程序请求SLO到idp,那么特定客户的所有其他开放应用程序都会注销? 我们不想让客户的其他应用程序因我们的应用程序而注销。 请告知。如果SAML SLO请求只会影响请求注销的唯一服务提供商或客户SSO登录的所有服务提供商?

  • 用户登录 在用户登录App账号时调用以下登录方法,从而保证用户是以登录身份进行咨询,是区分会话的用户的唯一标识; 游客咨询不需要调用小能login方法,小能会自动生成一个游客身份标识,在客服端游客身份的用户名显示为:“游客+4位数字”。 App完全退出(被杀掉进程), 再次进入时, 在SDK初始化之后, 如果App本身账号是登录用户, 需要重新调用小能SDK登陆接口,同步用户身份【大多是针对App

  • 登录与注销 用户登录 在App登录的地方,调用小能的login方法,目的是传递账号信息,为客服端显示用户信息。在App被杀死之后,sdk会保持用户的登录状态,不需要再次调用登录的方法。 uid作为用户的唯一标识需要保证唯一性,username可根据需要传入手机号、昵称等信息 /** * @param uid 必填,登录用户的id, 只能输入数字、英文字母和"@._—"四种字符,长度小于等于60位

  • 我构建了一个Angular,它有自己的服务和组件: 和: 然后我将其导入我的: 当我将注入时,出现错误: 应用程序组件中的错误:文件服务没有提供程序 来自Angular文档: 当我们导入模块时,Angular 会将模块的服务提供程序(其提供程序列表的内容)添加到应用程序根注入器中。 这使得应用程序中知道提供者的查找标记的每个类都可以看到提供者。 我做这件事缺少什么?

  • 我正在使用SimpleSAMLPhp服务提供商实现SSO。 我提供了我的元数据远程Shibboleth身份提供者,并提供了一个测试帐户。 当用户访问我的SP上的特定页面时,他们会被重定向到IdP、登录,并使用IdP提供的一组属性重定向回我的网站。这部分工作正常。 这部分我正在努力。 如果用户通过不同的服务提供商使用相同的IdP进行身份验证,然后访问我的页面,我怎么知道他们已经通过身份验证?目前我被

  • 您好,我在ADFS 2.0中面临以下单一注销问题。 我使用ADFS 2.0作为RST,另一个ADFS 2.0注册为声明提供程序,并配置为表单身份验证。 我有4个依赖方(RPs)托管在另一台IIS服务器上。 在对索赔提供者进行身份验证后,我正在打开IE中的所有4个RPs。注销第一次运行得非常好。但如果我再次登录并单击注销,则刷新后任何一个RP应用程序都会保持登录状态。我还可以看到,在ADFS/LS站