使用AspNet.Security.OpenIdConnect.Server注销(ASP.NET vNext)

时间:2015-11-24 15:07:43

标签: asp.net jwt openid-connect aspnet-contrib

我正在使用Visual Studio 2015 Enterprise和ASP.NET vNext Beta8来发布和使用JWT令牌,如here所述。

在我们的实现中,我们在令牌发布时将一些客户端详细信息存储在Redis中,我们希望在用户注销时刷新此信息。

我的问题是退出OIDC的最佳做法是什么?

虽然我可以为此目的推出自己的控制器,但我不禁注意到Open ID Connect(OIDC)似乎有点准备处理这种情况。例如,OIDC具有OnLogoutEndpoint处理程序和LogoutEndpointPath设置。但是,当我调用OIDC注销URI时,处理程序似乎接受任何随机的x-www-form-urlencoded格式,我抛出它并且不以任何特定的方式似乎要求存在令牌。

非常感谢任何有关正确的OIDC注销做法的建议。

1 个答案:

答案 0 :(得分:1)

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()以确保请求不被其他中间件拦截。