【问题标题】:Authenticating Angular API Call to Laravel验证对 Laravel 的 Angular API 调用
【发布时间】:2015-12-14 22:25:09
【问题描述】:

我正在使用 Laravel 和 Angular 构建一个应用程序。我已经定义了以下路线

Route::group(array('prefix' => 'api'), function() {
Route::resource('getdealsbymerchant/{merchant_id}', 'dealsController@getdealsbymerchant',
    array('only' => array('index')));
});

我有这条路线工作。当我点击它时,我会收到 JSON 响应。

我还能够在 Angular 中调用 API 来读取数据并显示它。

在我的 app.js 中我已经定义了

var app = angular.module('deals', [])
    .constant('API_URL', 'http://www.coupon.local/api/getdealsbymerchant/');

我知道我可以通过添加来保护路线

'middleware' => 'auth',

到路线。

我的问题是如何验证我的 Angular 应用程序以确保只有 Angular 应用程序可以访问 API 而不是其他人。

我是在 app.js 中传递用户名和密码还是有更好的方法?另外由于 app.js 在 public 文件夹中,不是每个人都能看到我传递的用户名密码吗?

请帮忙。 谢谢。

【问题讨论】:

  • 我的问题是如何验证我的 Angular 应用程序以确保只有 Angular 应用程序可以访问 API 而不是其他所有人。 - 使用一些令牌?域锁?顺便说一句,甚至有几个 api 提供者使用 key 来验证他们的客户端,但客户端实际上公开了 api 密钥,就像 google api 浏览器密钥、twitter api 密钥等一样。
  • 这是否意味着如果我的 API 允许更新/删除,任何用户都可以看到我的密钥并使用它来访问 API 和更新/删除记录?抱歉,我无法理解此身份验证,所以问。
  • 实际上,您可以代替验证您的应用程序 - 您可以按用户执行此操作。就像scotch.io token based authentication for angular js and laravel app 中解释的那样,您可以改为对用户进行身份验证 - 它更安全,我们只需要一个 session 密钥 - 在用户登录时生成并在以后丢弃(通过不活动或注销)。 ps 是的,这意味着如果我的 API 允许更新/删除,如果您使用应用程序密钥,任何用户都可以看到我的密钥并使用它来访问 API
  • 我使用这个提示:登录时,我使用 https 将用户名(纯文本)和密码(sha-256)发送到服务器。服务器返回一个 API 密钥(存储在帐户数据中,例如当前时间毫秒和 sha-256,为每次密码更改生成),我使用一些 Angular 本地存储来存储基本身份验证信息(基本 =)。然后,我使用全局资源配置为每个调用发送这个。

标签: angularjs laravel-5.1


【解决方案1】:

以角度存储任何用户或密码、密钥等是一个坏主意,因为它使用户可以看到它。我知道的最好的方法是制作一个中间层……所以不要调用这个端点: http://www.coupon.local/api/getdealsbymerchant/

angular 应该调用: http://www.coupon.local/getdealsbymerchant 它将在内部调用 api 并在服务器端拥有所有私有的东西

【讨论】:

  • 我不确定我是否在关注。我是否应该为此调用coupon.local/getdealsbymerchant 提供一个 PHP 文件。如果是这样的话,其他人不是也能走上这条路吗?它如何区分 AngularJS 应用程序调用和普通用户调用?
  • 你可以在你的 laravel 应用中创建一个控制器来调用你的 api。您从中获得的是,去 laravel 的调用已经过身份验证,因此除非经过身份验证,否则其他人无法调用它
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 2014-12-03
  • 2018-12-04
  • 2019-10-29
  • 2019-05-16
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多