使用 AspNet.Security.OpenIdConnect.Server 注销 (ASP.NET vNext)
Logging Out With AspNet.Security.OpenIdConnect.Server (ASP.NET vNext)
我正在使用 Visual Studio 2015 Enterprise 和 ASP.NET vNext Beta8 来发布和使用 JWT 令牌,如 所述。
在我们的实现中,我们在令牌发布时将一些客户端详细信息存储在 Redis 中,我们希望在用户注销时刷新此信息。
我的问题是使用 OIDC 注销的最佳做法是什么?
虽然我可以为此目的推出自己的控制器,但我不禁注意到 Open ID Connect (OIDC) 似乎已准备好处理这种情况。例如,OIDC 有一个 OnLogoutEndpoint 处理程序和 LogoutEndpointPath 设置。但是当我调用 OIDC 注销 URI 时,该处理程序似乎接受我抛出的任何随机 x-www-form-urlencoded 形式,并且似乎没有以任何特定方式要求存在令牌。
任何关于正确的 OIDC 注销实践的建议将不胜感激。
在AspNet.Security.OpenIdConnect.Server
中,用于注销端点的逻辑留作练习。
在此 sample 中,它是使用 MVC 6 控制器实现的,您当然可以在其中自由添加自定义逻辑以从您的 Redis 服务器中删除缓存的详细信息。
[HttpPost("~/connect/logout")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout() {
// When invoked, the logout endpoint might receive an unauthenticated request if the server cookie has expired.
// When the client application sends an id_token_hint parameter, the corresponding identity can be retrieved using AuthenticateAsync.
var identity = await HttpContext.Authentication.AuthenticateAsync(OpenIdConnectServerDefaults.AuthenticationScheme);
// Remove the cached details here. If you need to determine
// who's the authenticated user, you can use the identity variable.
// Remove the authentication cookie and return the user to the client application.
return SignOut("ServerCookie", OpenIdConnectServerDefaults.AuthenticationScheme);
}
您也可以直接从 LogoutEndpoint
事件中执行类似的操作。不要忘记调用 context.HandleResponse()
以确保请求没有被另一个中间件拦截。
我正在使用 Visual Studio 2015 Enterprise 和 ASP.NET vNext Beta8 来发布和使用 JWT 令牌,如
在我们的实现中,我们在令牌发布时将一些客户端详细信息存储在 Redis 中,我们希望在用户注销时刷新此信息。
我的问题是使用 OIDC 注销的最佳做法是什么?
虽然我可以为此目的推出自己的控制器,但我不禁注意到 Open ID Connect (OIDC) 似乎已准备好处理这种情况。例如,OIDC 有一个 OnLogoutEndpoint 处理程序和 LogoutEndpointPath 设置。但是当我调用 OIDC 注销 URI 时,该处理程序似乎接受我抛出的任何随机 x-www-form-urlencoded 形式,并且似乎没有以任何特定方式要求存在令牌。
任何关于正确的 OIDC 注销实践的建议将不胜感激。
在AspNet.Security.OpenIdConnect.Server
中,用于注销端点的逻辑留作练习。
在此 sample 中,它是使用 MVC 6 控制器实现的,您当然可以在其中自由添加自定义逻辑以从您的 Redis 服务器中删除缓存的详细信息。
[HttpPost("~/connect/logout")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout() {
// When invoked, the logout endpoint might receive an unauthenticated request if the server cookie has expired.
// When the client application sends an id_token_hint parameter, the corresponding identity can be retrieved using AuthenticateAsync.
var identity = await HttpContext.Authentication.AuthenticateAsync(OpenIdConnectServerDefaults.AuthenticationScheme);
// Remove the cached details here. If you need to determine
// who's the authenticated user, you can use the identity variable.
// Remove the authentication cookie and return the user to the client application.
return SignOut("ServerCookie", OpenIdConnectServerDefaults.AuthenticationScheme);
}
您也可以直接从 LogoutEndpoint
事件中执行类似的操作。不要忘记调用 context.HandleResponse()
以确保请求没有被另一个中间件拦截。