Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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/1/angularjs/21.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
我可以在没有JavaScript身份验证的情况下访问API吗? 情况_Javascript_Angularjs_Api_Rest_Web Applications - Fatal编程技术网

我可以在没有JavaScript身份验证的情况下访问API吗? 情况

我可以在没有JavaScript身份验证的情况下访问API吗? 情况,javascript,angularjs,api,rest,web-applications,Javascript,Angularjs,Api,Rest,Web Applications,我用AngularJS开发了一个WebApp 我在服务器端有一个restful API,其中包含GET和POST命令 我想在我的模块中使用API(在JavaScript中是指)来显示和编辑我的数据 我想用某种身份验证来保护API(例如,使用API密钥的基本身份验证) 我不想在用户使用应用程序本身时保护API 实际问题 好吧,我想最后一点有点不清楚 我希望用户可以在没有任何身份验证的情况下将应用程序与浏览器一起使用 但当第三方应用程序想要访问API时,它必须使用身份验证 由于JavaScrip

我用AngularJS开发了一个WebApp

  • 我在服务器端有一个restful API,其中包含
    GET
    POST
    命令
  • 我想在我的模块中使用API(在JavaScript中是指)来显示和编辑我的数据
  • 我想用某种身份验证来保护API(例如,使用API密钥的基本身份验证)
  • 我不想在用户使用应用程序本身时保护API
实际问题 好吧,我想最后一点有点不清楚

我希望用户可以在没有任何身份验证的情况下将应用程序与浏览器一起使用
但当第三方应用程序想要访问API时,它必须使用身份验证

由于JavaScript是在客户端执行的,我当然不能将主密钥写入js或类似的东西

有什么模式或解决方案可以解决这个问题吗

更多规格 指及

在服务器端,我使用它的内置模板引擎。我确实使用了模板引擎,实际上只是在索引页面上动态插入CSS和JS

用于身份验证的代码类似于:

def is_authenticated(request):
    if 'api_key' in request.arguments:
        return sql('SELECT id FROM keys WHERE key=%S' % request.arguments['api_key']).count == 1
我的AngularJS模块正在执行类似的操作:

$http.get('/api/foo?api_key=1234')
            .then(function (result) {
                $scope.data = result.data
});
如您所见,我正在将API密钥写入js。但我不想避免这种情况

还有,你所说的第三方到底是什么意思

不是第三方请求:使用http://App.example.com上的应用程序和浏览器

例如,第三方请求可能来自Android应用程序。来自外部或远程的东西。
来自浏览器的JS请求在上实际页面不会来自远程(再次说明:因为它是JS,所以实际上来自远程-但我希望现在它变得更清晰)

哦,在我忘记之前。。。 我知道我的计划有点奇怪,但这只是一个学习(-web开发)-通过做项目。
此外,API密钥并不是绝对避免滥用,而是记录第三方的使用情况


PS我希望我的问题对你来说是清楚的

嗯,我将尝试解决这些问题,但这里有几件事

  • 这个问题在stackoverflow.com的当前格式中并不合适(应该是编程问题,我尝试过X和Y),可能更接近StackExchange问题,但仍然是相当开放的
  • 包括有关使用服务器端的语言(和/或框架)的详细信息,以及您拥有的任何相关代码(身份验证代码?)
  • 将密钥放入客户端代码并从客户端传输意味着任何拥有web代理(查看Charles或Wireshark)的人都可以获取密钥,因此只是重申你是对的,这不是正确的方法

  • 查看其他组织如何允许您访问其API(例如Google、LinkedIn、Facebook、Twitter),以了解其工作原理。在所有这些情况下,您都需要登录到服务才能生成API密钥,在某些情况下,您必须指定使用该API密钥的请求将来自哪个域。如果您使用相同的预防措施,根据注册API用户的数据库检查随请求发送的API密钥,并验证请求中的域,那么我会说您的状态非常好。

    您还不清楚。在什么情况下你不想保护它?您的意思可能是:将其公开为Java API层,并通过HTTP身份验证保护REST API?还有,你说的第三方到底是什么意思?@EliranMalka更新了我的问题-希望现在能更清楚