Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证OWIN生成的令牌来自为其生成令牌的用户?_C#_Asp.net Mvc_Oauth 2.0_Jwt_Owin - Fatal编程技术网

C# 如何验证OWIN生成的令牌来自为其生成令牌的用户?

C# 如何验证OWIN生成的令牌来自为其生成令牌的用户?,c#,asp.net-mvc,oauth-2.0,jwt,owin,C#,Asp.net Mvc,Oauth 2.0,Jwt,Owin,我正在使用OWIN生成访问令牌,该令牌在OTP验证成功后传递给用户。 我关注的是: 如果客户端1生成了一个有效的令牌,并在头中的后续请求中将其传递给我 如果客户端2还生成了一个有效令牌,并在头中的后续请求中将其传递给我 两个客户端都有一个有效的令牌,并有一定的到期时间 现在的问题是,如果客户端1使用客户端2令牌,那么我的[authorize]属性也将成功传递令牌并相应地发送响应 我想让这一切停止。因为只有为其生成令牌的客户端才能使用该令牌。客户端2无法使用客户端1 谢谢好的,您可以这样做:

我正在使用OWIN生成访问令牌,该令牌在OTP验证成功后传递给用户。 我关注的是:

  • 如果客户端1生成了一个有效的令牌,并在头中的后续请求中将其传递给我

  • 如果客户端2还生成了一个有效令牌,并在头中的后续请求中将其传递给我

    两个客户端都有一个有效的令牌,并有一定的到期时间

  • 现在的问题是,如果客户端1使用客户端2令牌,那么我的
    [authorize]
    属性也将成功传递令牌并相应地发送响应

    我想让这一切停止。因为只有为其生成令牌的客户端才能使用该令牌。客户端2无法使用客户端1

    谢谢

    好的,您可以这样做:

    为用户生成令牌时,获取用户ip

    var ip = HttpContext.Current.Request.UserHostAddress
    
    将IP保存在映射表中,用户| IP |令牌 现在,对于每个请求,您可以通过添加自定义Authorize属性来验证IP是否属于用户

    public class CheckIpAuthorize : AuthorizeAttribute
        {
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                //here you can go to your map table and validate if the IP 
                //and User match
                return true;
            }
    

    这是通过IP验证所需内容的唯一方法,因为您无法验证用户与令牌,因为用户属于令牌。

    客户端1如何获得客户端2的令牌?关键是,令牌对该客户机来说是一个秘密。否则,您只需使用另一个令牌来保护第一个令牌,然后再次循环。例如,避免恶意工具拦截和误用包是非常有用的+1@ADyson嗯,让我们假设两个人坐在一个房间里,都用自己的凭证登录,并收到一个访问令牌作为回报。为了下一次获得访问权,他将随请求一起发送令牌。因此,第一个人使用第二个人令牌,并将其传递给他可以修改标头的所有请求。他可以使用各种工具查看标头中传输的数据。该站点是否未通过HTTPS运行?使用HTTPS避免任何通过网络截获的机会。如果他们只是在互相审视……那么站点不应该在页面或浏览器栏中任何可见的地方显示令牌。如果客户端2离开他们的桌面,客户端1继续在那里偷令牌,那是客户端2的问题,而不是你的问题。我真的看不出你在想象什么样的现实情景。除了我刚才描述的你认为代币可能被盗的情况,还有其他情况吗?你说“所以第一个人使用第二个人令牌”,但没有说他是如何得到它的。客户端的IP地址经常动态变化,现在的用户使用多个设备。从严格的技术角度来看,这种方法可能“有效”,但不久之后,它就会开始让那些一直被锁在门外的用户和不得不解锁它们的帮助台工作人员非常恼火。在任何情况下,请参阅我上面的评论-如果站点使用SSL,并且令牌没有在querystring中发送,并且它没有永久保存或类似的愚蠢行为,那么这真的不是问题。OP没有给我们提供任何值得关注的有效场景。我同意,但是一个设备和另一个设备中的令牌是不同的,无论如何,我只是帮助他找到了一个可能对他有效的解决方案,这是他在这种情况下唯一能做的事情,看看是否有效“但是一个设备中的令牌和另一个设备中的令牌是不同的”,这并不是那么糟糕。浏览器会话中的令牌与另一个会话中的令牌也不同,尽管IP相同,但这可能会导致问题。过期的代币需要定期移除。而且,将令牌保存在实际需要的地方以外的任何地方也可能是其自身的安全缺陷。