c# - OWIN OpenId 身份验证 - 注销后的活动会话
问题描述
我在我的应用程序中实现了 ASP.Net Cookie 身份验证和 OWIN OpenId 身份验证的混合。我正在尝试修复一个安全漏洞,即使在注销后会话也不会失效。
中间件实现:
app.UseCookieAuthentication( 新的 CookieAuthenticationOptions { AuthenticationType = CookieAuthenticationDefaults.AuthenticationType, app.UseOpenIdConnectAuthentication(新的 OpenIdConnectAuthenticationOptions { 客户 ID = 客户 ID, 权威=权威, } } );
注销代码(基于用户类型):
HttpContext.GetOwinContext().Authentication.SignOut(
OpenIdConnectAuthenticationDefaults.AuthenticationType,
CookieAuthenticationDefaults.AuthenticationType);
HttpContext.GetOwinContext().Authentication.SignOut(
CookieAuthenticationDefaults.AuthenticationType);
我正在捕获Fiddler中的流量并单击从网页注销。当我尝试从 Fiddler 重新发出请求时,它成功完成并且在 HttpModule 中,它Application.User.Identity.IsAuthenticated
是True
我有一些问题:-
- 这是 Cookie 重放攻击吗?
- 我做错了什么,如果不是,我将不得不通过一些黑客来修复它,比如在缓存中存储一个 cookie 并进行比较?
解决方案
从您的应用程序中注销时,您也必须从身份服务器中注销。否则,您的应用程序将被重定向到身份服务器,重新进行身份验证并重新登录。检查通知下的以下代码段:
app.UseCookieAuthentication(
new CookieAuthenticationOptions
{
AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
},
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = n =>
{
// if signing out, add the id_token_hint
if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest)
{
var idTokenHint = n.OwinContext.Authentication.User.FindFirst("id_token");
if (idTokenHint != null)
{
n.ProtocolMessage.IdTokenHint = idTokenHint.Value;
}
}
return Task.FromResult(0);
}
}
}
);
您将在此处找到一些 OWIN 中间件设置示例(虽然不是您问题的直接答案)
推荐阅读
- botframework - 使用哪个版本来构建机器人:机器人框架 SDK 3.x 或 SDK4.0?
- python - Runge Kutta 4 和 python 中的钟摆模拟
- angular - PrimeNG 烤面包机未显示 - Angular 6
- java - 为什么 Scanner 在读取文件时不转到下一行?
- c# - 在 nunit3 中忽略了测试超时
- python - 在 XML 文件中搜索字符串并在菜单树中打印位置 - Python
- python - 包含编号和名称排序的列表
- vba - VBA最小值和表格
- visual-studio-code - 如何在 Visual Studio 代码中按源列出快捷方式?
- android - 水平 RecyclerView 的 ItemTouchHelper