跨域API身份验证

时间:2016-09-06 20:06:41

标签: php api laravel cross-domain lumen

我需要将JSON网络服务公开给公司的另一个分支机构,他们将在公共网络应用程序中管理自己的用户表,而我的应用程序只有在办公室局域网内有不同的用户组时才可访问。到目前为止的计划是,他们将使用AJAX请求使用Web服务,我应该返回JSON,但我不知道如何在不暴露HTML源代码中的凭据的情况下进行身份验证。基本工作流程是:

  1. 用户X登录其他分支的网络应用程序(我无法控制此过程)
  2. 用户X单击按钮,其他分支的服务器向我的服务器发出请求
  3. 我的服务器获取数据并返回JSON
  4. 其他服务器填充一个dropdow(或类似的东西)
  5. 我已经阅读了一些关于API的教程,但所有这些教程都谈到在users表中添加一个令牌字段,这不是我的情况。什么是安全的方式呢?即使它在我们的企业局域网内部,我也不希望在没有身份验证的情况下公开Web服务

1 个答案:

答案 0 :(得分:2)

听起来其他分支的网络应用程序是您的网络应用程序的客户端。授权他们的 Web应用程序向您的 Web应用程序发出请求的最标准化和可接受的方法是通过OAuth集成这两个应用程序。

使用OAuth服务器,希望与您的服务集成的Web应用程序被称为“客户端”。每个客户都签发了client_idclient_secret。您可以遵循一些不同的流程,每个流程都有自己的前提条件和期望。我不会在这里重复它们,但是this article看起来它有一个非常好的总结,并且可以作为入门指南为您提供良好的服务。

我会说我认为实施最简单的流程是密码授予,但要求您完全信任集成应用程序,因为它将知道您的用户的登录凭据。从您对问题的描述来看,这似乎不是一个问题。

注意 - 链接的DigitalOcean文章将密码授予流程称为“密码凭据流”

集成后,会请求授权令牌并将其保留在客户端应用程序中。请求和检索的方式取决于您遵循的授权流程。对API的每个请求都在Authorization标头内包含此“承载”令牌,然后在资源服务器上对其进行检查和验证。只有包含有效令牌的请求才会实际使用来自您的应用程序的数据。

我已经使用lucadegasperi/oauth2-server-laravel软件包在Laravel中实现了OAuth2服务器而没有太多麻烦,但是从Laravel 5.3开始它已经被弃用了。你可以考虑尝试laravel/passport,我没有经验。