使用令牌验证 API 请求

Authenticating an API request with a Token

假设我向以下 URL 发出 API 请求:

https://myapi.com/data

这是我构建的 API 并拥有完全控制权。

我想将对此 API 的访问限制为只有我授权的应用程序。

我看到许多服务会为您提供一个 API 密钥,您可以将其附加到 URL 以授予您访问权限。

假设我有:

https://myapi.com/data?key=a6reallly7long2string9of0numbers2and4letters

然后在后端我有类似的东西:

class REST {
    public $ACCESS_TOKEN = 'a6reallly7long2string9of0numbers2and4letters',

    public function Auth($token){

        if($token===$this->ACCESS_TOKEN) return true; 

        return false;
    }
}

如果值匹配,我允许访问。

但是有人需要做的就是查看应用程序在客户端发出的请求并且他们拥有令牌。

即使我加密令牌或使用单向哈希,它们仍将具有解密为正确结果的值。

如何通过 URL 令牌对 API 进行良好的身份验证?

I would like to limit access to this API to only the apps I authorize.

你要找的是"access authorization"。的确,access token好像是个好办法,但是还是有一些不足

**授权header**

默认情况下,令牌应作为 HTTP header (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) 发送,而不是 url

常用的Authorizationheader类型有Basic(用于基本认证)和Bearer(用于OAuth认证授权)

令牌不应是硬编码常量。它应该是 created/generated 基于应用程序(和可选的用户)身份验证。如果令牌是临时的,那就更好了

现在您可以问 - 应用程序如何保密其凭据?每个应用程序都可以有自己的服务器服务(最终用户 should.not 访问应用程序凭证)或者纯 Web 应用程序应该由 CORS headers

控制

只需搜索 OAuth 2.0 协议和 JWT 令牌(jwt 应该 self-contained 并签名)。

恕我直言,当没有其他选择时,URL 令牌可能是一个选项,因为 URL 经常被缓存、重新发送、记录,...

** API 经理 **

如果您有这样做的资源(服务器),您可以部署一个 API 管理器(有开源、商业或云选项,只需搜索一些)。 API 经理将处理申请注册、授权和执行。