Owin 身份验证单点退出
Owin Authentication Single Sign-Out
我有一个用于单点登录的自定义身份验证中间件。我想知道我应该如何实施单点退出解决方案。
我需要调用 Authentication.Signout()
来注销我的应用程序,但随后我需要将用户重定向到我们自定义 STS 的注销端点。我应该在哪里处理这个? Invoke
? ApplyResponseGrant
?根本不在处理程序中,而只是手动重定向?
编辑:
这是一个 MVC 应用程序。除了将本地注销链接到注销 STS 之外,我一切正常。在此处添加我现有的代码只会混淆我的问题,IMO。如果有一段特定的代码可以提供帮助,请告诉我,我会添加它。
理想情况下,我想要某种事件或标志告诉我用户正在注销,然后将响应更改为对外部注销的 302。如果我将此代码放在 ApplyResponseGrant
中,我感觉它会阻止 CookieAuthentication 中间件清除身份验证 cookie。如果我将此代码放在注销控制器操作中(在调用 Authentication.SignOut()
之后),那么我将其留给每个应用程序来处理单点注销。
我成功了。这是我所做的。
在我的 AccountController
中,我添加了 Logout
操作 returns Redirect("/signout-custom")
。
在我的 OWIN 处理程序中,我在 Invoke
方法中观察 URL,调用我的远程注销端点、本地注销方法,并停止 OWIN 处理。
public override async Task<bool> InvokeAsync() {
//other code
if (Request.Path == Options.LogoutCallbackPath) {
Context.Authentication.SignOut(Options.AuthenticationType);
Response.Redirect(WebUtilities.AddQueryString(Options.ClauthLogoutUri, "returnUrl", "http://localhost:62506/Home/About"));
return true;
}
//other code
}
重定向不会中断 OWIN 流程,因此 CookieAuthentication
中间件仍会运行并清除本地身份验证 cookie。
我有一个用于单点登录的自定义身份验证中间件。我想知道我应该如何实施单点退出解决方案。
我需要调用 Authentication.Signout()
来注销我的应用程序,但随后我需要将用户重定向到我们自定义 STS 的注销端点。我应该在哪里处理这个? Invoke
? ApplyResponseGrant
?根本不在处理程序中,而只是手动重定向?
编辑: 这是一个 MVC 应用程序。除了将本地注销链接到注销 STS 之外,我一切正常。在此处添加我现有的代码只会混淆我的问题,IMO。如果有一段特定的代码可以提供帮助,请告诉我,我会添加它。
理想情况下,我想要某种事件或标志告诉我用户正在注销,然后将响应更改为对外部注销的 302。如果我将此代码放在 ApplyResponseGrant
中,我感觉它会阻止 CookieAuthentication 中间件清除身份验证 cookie。如果我将此代码放在注销控制器操作中(在调用 Authentication.SignOut()
之后),那么我将其留给每个应用程序来处理单点注销。
我成功了。这是我所做的。
在我的 AccountController
中,我添加了 Logout
操作 returns Redirect("/signout-custom")
。
在我的 OWIN 处理程序中,我在 Invoke
方法中观察 URL,调用我的远程注销端点、本地注销方法,并停止 OWIN 处理。
public override async Task<bool> InvokeAsync() {
//other code
if (Request.Path == Options.LogoutCallbackPath) {
Context.Authentication.SignOut(Options.AuthenticationType);
Response.Redirect(WebUtilities.AddQueryString(Options.ClauthLogoutUri, "returnUrl", "http://localhost:62506/Home/About"));
return true;
}
//other code
}
重定向不会中断 OWIN 流程,因此 CookieAuthentication
中间件仍会运行并清除本地身份验证 cookie。