使用令牌验证API请求

时间:2017-05-15 20:59:46

标签: ajax api authentication token restful-authentication

假设我向以下网址发出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;
    }
}

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

但所有人都必须做的是查看应用程序在客户端进行的请求,并且他们有令牌。

即使我加密令牌或使用单向散列,它们仍然具有解密到正确结果的值。

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

1 个答案:

答案 0 :(得分:1)

  

我想将此API的访问权限仅限于我授权的应用。

您在寻找什么是“访问授权”。实际上,访问令牌似乎是一种好方法,但缺少某些方面

**授权标题**

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

常用的授权标头类型是Basic(用于基本身份验证)和Bearer(用于OAuth身份验证和授权)

令牌不应该是硬编码常量。应根据应用程序(以及可选的用户)身份验证创建/生成它。如果令牌是临时的,那么还是会更好

现在您可以问 - 应用程序如何保密其凭据?每个应用程序都可以拥有自己的服务器服务(最终用户不应该访问应用程序凭据)或纯Web应用程序应该由CORS标头控制

只需搜索OAuth 2.0协议和JWT令牌(jwt应该是自包含和签名的)。

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

** API Manager **

如果您有资源(服务器)这样做,您可以部署API管理器(有开源,商业或云选项,只搜索一些)。 API管理器将处理应用程序注册,授权和实施。