AngularJs和Laravel api - 如何防止我的网站外部使用

时间:2016-02-04 09:24:15

标签: angularjs api security

我在Laravel 5.2中构建了一个后端,并在AngularJS中构建了前端。

该网站有一个事件列表,它向后端发出GET请求以获取所有事件。

如何阻止有人使用我的API在其他网站上或通过移动应用获取活动? 我希望端点只是形成我的前端的accessibile。

这可能吗?
我该怎么检查?
API密钥是这样的吗?

2 个答案:

答案 0 :(得分:1)

使用OAuth2。我认为现在最受欢迎。

  

OAuth 2.0专注于提供客户端开发人员的简单性   Web应用程序,桌面的特定授权流程   应用程序,移动电话和客厅设备。这个   规范正在IETF OAuth工作组内开发并以此为基础   关于OAuth WRAP提案。

这里有一些广泛的documentation如何在Laravel中使用OAuth2。

  

OAuth 2.0授权框架支持第三方使用   应用程序,以获得对HTTP服务的有限访问,或者在   通过编排批准交互来代表资源所有者   资源所有者和HTTP服务之间,或通过允许   第三方应用程序以代表自己获取访问权。

OAuth2中有许多受支持的grant types

  1. 授权码
  2.   

    授权码是通过授权服务器获得的   作为客户端和资源所有者之间的中介。代替   直接从资源所有者,客户端请求授权   将资源所有者指向授权服务器(通过其   [RFC2616]中定义的用户代理,反过来指示
      资源所有者使用授权码返回客户端。

    1. 资源所有者密码凭据
    2.   

      资源所有者密码凭据(即用户名和密码)   可以直接用作授权授权来获取访问权限   令牌。凭证只应在有高价时使用   资源所有者和客户之间的信任程度(例如,   客户端是设备操作系统的一部分或具有高权限   应用程序),以及其他授权授权类型时   可用(例如授权码)。

      1. 客户端凭据
      2.   

        客户端凭据(或其他形式的客户端身份验证)可以是   授权范围为
        时,用作授权许可   仅限于客户控制下的受保护资源,
          或以前通过授权安排的受保护资源
          服务器。客户端凭证用作授权授权
          通常当客户代表自己行事时(客户是
          也是资源所有者)或正在请求访问受保护的   基于先前与中心安排的授权的资源   授权服务器。

        1. 刷新令牌
        2.   

          刷新令牌是用于获取访问令牌的凭据。刷新   令牌由授权服务器发给客户,并且是   用于在当前访问令牌
          时获取新的访问令牌   变得无效或过期,或获取额外的访问权限
            具有相同或更窄的范围(访问令牌可能有更短的   生命周期和权限少于资源授权的权限
            所有者)。发布刷新令牌是可选的,由...决定   授权服务器。如果授权服务器发出刷新
            令牌,在发出访问令牌时包括它(即步骤(D))   图1)。

          1. 访问令牌
          2.   

            访问令牌是用于访问受保护资源的凭据。一个   访问令牌是表示发给
            的授权的字符串   客户。该字符串通常对客户端不透明。令牌
              代表具体的访问范围和持续时间,由   资源所有者,由资源服务器和授权强制执行   服务器

            1.   

              隐式授权是优化的简化授权代码流程   对于使用脚本语言在浏览器中实现的客户端   作为JavaScript。在隐式流程中,而不是发出客户端   授权代码,直接向客户端发出访问令牌   (作为资源所有者授权的结果)。授权类型
                是隐式的,因为没有中间凭证(例如授权)   发布(以后用于获取访问令牌)。

答案 1 :(得分:0)

您提到的内容称为跨站点请求伪造CSRF,以防止它使用特定于您的服务器的Header参数,它的标准名称是X-Requested-With。

  

由于此标头不在安全列表中(未在服务器上启用CORS),因此无法通过AJAX跨域发送此标头。 HTML表单也不能发送此标题。

检查此answer

如果你想使用OAuth,你可以使用客户端授权类型,因为你知道没有用户特定的数据,但我不认为这是这种情况的最佳答案。