跨域 API 身份验证

Cross Domain API authentication

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

  1. 用户X登录其他分支的网络应用程序(我无法控制这个过程)
  2. 用户X点击一个按钮,其他分支的服务器向我的服务器发出请求
  3. 我的服务器获取数据并 returns JSON
  4. 其他服务器填充下拉列表(或类似的东西)

我已经阅读了一些有关 API 的教程,但所有教程都在谈论在用户中添加令牌字段 table,但我不会这样做。什么是安全的方法呢?即使它在我们公司的 LAN 中,我也不想在没有身份验证的情况下公开 Web 服务

听起来其他分支的网络应用程序是您的网络应用程序的客户端。授权他们的网络应用程序向您的网络应用程序发出请求的最标准化和公认的方法是通过[=13=集成两个应用程序].

对于 OAuth 服务器,希望与您的服务集成的 Web 应用程序被称为 'clients'。每个客户端都会收到 client_idclient_secret。您可以遵循几个不同的流程,每个流程都有自己的先决条件和期望。我不会在这里重复它们,但 this article 看起来它有一个很好的总结,可以作为入门指南很好地为您服务。

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

注意-链接的 DigitalOcean 文章将密码授予流程称为 "Password Credentials Flow"

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

我用过lucadegasperi/oauth2-server-laravel package to implement an OAuth2 server in Laravel without too much of a headache, but it looks like since Laravel 5.3 it has been deprecated. You can look into trying laravel/passport,没有经验