假设我向以下网址发出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进行良好的身份验证?
答案 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管理器将处理应用程序注册,授权和实施。