让我们考虑以下情况:
我们有一个角度js前端,它使用内部API来获取和操作数据。
我们在/api/internal
下公开此API。但是,我们不希望公开访问它,我们希望它只能由我们的前端访问。为确保这一点,我们仅允许使用请求标头中传递的令牌访问API:Authorization: Token token=xxx
问题在于我们如何为所有请求设置此令牌。我们可以采取这样的方法:
angular.module('myApp').run(function($http) {
$http.defaults.headers.common.Authorization = 'Token token="xxx"'
})
问题当然是,这将在客户端,这意味着任何人将检查javascript和grep的Token
或Authorization
字符串将能够找到令牌并使用它来访问数据。
当然还有其他安全措施,但只关注这个问题,我感兴趣的是如何以不同方式和更安全的方式处理它。
答案 0 :(得分:1)
您可以尝试以下内容:
sessions
表。 sessions
中并将其与某个加密值相关联。 sessions
表中访问与该加密值关联的原始令牌并进行处理。sessions
表中删除该条目。API Token Safety in Angular application和Authentication with AngularJS, session management and security issues with REST Api WS以及How to secure my AngularJS and Web Api application列出的技术也可能有用
答案 1 :(得分:0)
如果您想使用令牌,但担心重复使用令牌(从而打开劫持),您可以使用nonce令牌。实际上,每个请求都会返回一个新标记(可能在标题中),每个标记只能使用一次。