2017-05-15 419 views
0

API请求假设我做一个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提供良好的身份验证?

回答

1

我想将此API的访问权限限制为仅允许我授权的应用程序。

你在找什么是“访问授权”。事实上,一个访问令牌似乎是一个很好的方式,但也有一些方面缺少

** Authorization头**

默认情况下,该令牌应作为发送一个HTTP标头(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)未在url

常用授权标头类型是基本(基本认证)和承载(用于OAuth认证和授权)

令牌不应该是一个硬编码恒定。它应该基于应用程序(以及可选的用户)身份验证来创建/生成。如果令牌是暂时的,那么它仍然更好

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

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

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

** API经理**

如果你有资源(服务器)的话,你可以部署一个API管理器(也有开源的,商业或云的选项,只是寻找一些)。 API经理将处理应用程序的注册,授权和执行。

+0

谢谢,先生!是有道理的,我很欣赏这个彻底的回复 – yevg

+0

好吧 - 这是一个非常广泛的话题,很难在手机上撰写综合文章。我只是试图给你一些开始点.. – gusto2