Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Api 如何获取授权令牌_Api_Security - Fatal编程技术网

Api 如何获取授权令牌

Api 如何获取授权令牌,api,security,Api,Security,我使用基于令牌的身份验证保护了我的Web Api。所有这些都可以很好地工作,但是现在在进行api调用之前,我通过进行单独的api调用来请求令牌,该调用将返回令牌以进行进一步的请求。我想知道的是,有没有可能在客户端生成令牌,然后在服务器上解密? 或 你怎么想,我走对了 这是我的jQuery代码 $.when($.get("/api/service/GetToken")) .done(function (token) {

我使用基于令牌的身份验证保护了我的Web Api。所有这些都可以很好地工作,但是现在在进行api调用之前,我通过进行单独的api调用来请求令牌,该调用将返回令牌以进行进一步的请求。我想知道的是,有没有可能在客户端生成令牌,然后在服务器上解密? 或 你怎么想,我走对了

这是我的jQuery代码

  $.when($.get("/api/service/GetToken"))
                .done(function (token) {

                    doAjaxCall("GET", "/api/service/GetAllJobsStatusCount/1/admin", "{}", "json", token, function (data) {

                        console.log(data);
                    });

                });
这是我的方法,它将返回令牌

[Api.HttpGet]
        public string GetToken()
        {
            var authorizeToken = "apikey";
            return Rsa.Encrypt(authorizeToken);
        }

请建议

如果使用加密连接(HTTPS),则单个令牌只能用于身份验证-否则,MITM可以读取令牌并窃取身份。如果一切都是使用安全连接完成的,那么谁计算令牌并不重要,只要它在任何身份验证之前交换,因此双方都事先知道它——否则就无法知道它是否有效。但是,请注意,令牌始终只能证明客户是首先向其提供(或从其接收)令牌的客户,您仍然不知道其他任何事情(例如,如果进行te交换时,另一个人就是他声称的人)

如果不使用安全连接,我建议使用公钥加密。如果不加密整个请求,请计算签名并使用私钥客户端对其进行签名,然后在服务器端对其进行验证。在这种情况下,客户端必须计算私钥和公钥,并将公钥交给服务器,因为服务器永远不应该知道客户端的私钥(而且它也不应该通过未加密的连接发送,毕竟这就是使用PKI的全部意义)

关于另一种方法(被广泛使用,但并不特别安全),请参见OAuth

[编辑]:根据评论添加:

要验证客户端,必须对访问有价值数据的每个请求进行身份验证。这意味着:客户机需要发送一些能够证明它是它在每个请求中声称的那个人的东西(因为HTTP是一个无状态协议)

通常的方法是交换某个秘密一次,该秘密在有限的时间内或永远有效,并且只有客户端和服务器知道。这样,服务器就可以通过检查客户端是否发送了它所获得的令牌来验证IDI实体。在之后过期令牌可以提高安全性,但当客户端请求已知令牌时,无法判断是否是使用旧令牌的同一客户端(除非该请求由旧令牌验证并且该令牌仍然有效)。
如果另一个客户机计算了令牌,那么它不会改变任何东西——它发送一次令牌并告诉服务器它是谁,那么每个携带相同令牌的请求很可能来自同一个客户机。在这里,服务器只需做一件额外的事情:如果两个客户端计算相同的令牌,服务器必须拒绝来自第二个客户端的令牌,并请求另一个令牌。否则,将无法再区分客户端。

因此,我要做的就是启用https。对吗?…并禁用http。对当然,您需要一个https证书,自签名证书以及大多数免费证书都会被浏览器拒绝(很可能在使用AJAX时会以静默方式拒绝,但对此并不确定)——因此,如果您还没有自己的证书,那么您可能不得不购买一个。最便宜的是每年约100-200美元。尽管如此,PKI仍然更安全,因为即使您的服务器受到攻击和公钥被盗,这些秘密仍然有效和安全。如果只使用单个令牌,它们在被盗时都会受损)非常感谢您提出的宝贵建议。再次确认一下,在提出进一步请求之前,我向服务器请求授权令牌是否正确?