Cookie可以安全地从一台机器发送到另一台机器以访问资源

时间:2015-12-17 01:41:38

标签: security laravel authentication cookies

这个问题有分析:

Mobile app
API server
Laravel 4.2 Web App server
Client web view (UIWebView/browser)

我正在寻找确保在移动应用程序上进行身份验证时确保对客户端进行安全API访问的最佳方法。下面我概述了我目前的策略:

Mobile ---(1) basic auth credentials ------> Laravel
 App                                          server
                                            /   ^   \
                                      (4)  /     \   \  (2) basic auth/
                                  cookie/ /       \   \    initial API request
                                  data   /     (3) \   \
                    Client  <___________/ payload/  \   \
                       |                   cookie    \   \_>   API
                       |(5)                           -----  server
                       |cookie/                                 ^
                       |request                                 |
                       -----------------------------------------

如果我的图纸不清楚,会发生以下情况:

  1. 基本身份验证信息从移动应用程序发送到laravel服务器
  2. 使用Laravel
  3. 的初始数据请求将基本身份验证信息发送到API服务器
  4. API服务器使用初始有效负载和访问cookie进行响应
  5. 我将访问cookie传递给客户端
  6. 客户现在可以使用cookie
  7. 自由访问API服务器

    我不是安全专家,但我没有看到这种方法有任何致命的缺陷。所有传输都通过HTTPS发送,基本凭证永远不会发送给客户端。

    所以我的问题主要在于步骤4和5.这对Laravel /在任何地方都是安全的吗?

    我在文档中看到,可以使用

    获取和设置Cookie
    Cookie::get('name');
    

    $response = Response::make('Hello World');
    
    $response->withCookie(Cookie::make('name', 'value', $minutes));
    

    在客户端,虽然我不确定如何确保我的cookie与我的API请求一起发送。任何输入都会很棒。

    注意:我负责Laravel服务器和客户端。我们公司刚开始采用混合方法部分移动应用程序,因此我们在混合平台时处理身份验证的新手(即我们知道如何进行Web登录,而不是像这样的间接身份验证)。

    提前致谢!

2 个答案:

答案 0 :(得分:0)

您是否将Laravel服务器用作api服务器的代理?

我猜你想要能够在旧的Laravel服务器和新的api服务器上验证用户,但是没有明确让用户登录到api服务器。

如果是这种情况,那么我会查看JWT auth令牌而不是尝试发送cookie。由于两个系统都由您控制,您可以在Laravel服务器上生成JWT令牌,然后可以使用该令牌在api服务器上对用户进行身份验证。如您所知,laravel和api服务器上的JWT秘密,您知道令牌在两台服务器上都是正确生成的,并且可以提供对同一用户的访问权限。

以这种方式执行此操作的一个好处是,一旦您迁移到新的api服务器,您的身份验证不必在api服务器上进行更改 - 它将仅适用于支持JWT身份验证的客户端

如果您不熟悉,可以在http://jwt.io找到更多信息。

答案 1 :(得分:0)

答案是否定的,这不能用cookies完成。它们仅对设置它们的路径有效(不能通过Laravel和Java服务器共享)。