java rest 密钥对_REST身份验证并公开API密钥

c0bda3feed9a1ec1c189af0490a5bf70.png

慕运维8079593

我们正在公开一个API,合作伙伴只能在他们向我们注册的域上使用。它的内容部分是公开的(但最好仅在我们已知的域中显示),但大部分对我们的用户是私有的。所以:要确定什么是所示,我们的用户必须和我们一起登录,但这是分开处理。要确定其中显示的数据,公共API密钥是用来限制进入我们知道域,首先要保证用户私有数据不会受到CSRF。这个API密钥的确对所有人可见,我们不会以任何其他方式对我们的合作伙伴进行身份验证,并且我们不需要REFERER。仍然是安全的:当我们get-csrf-token.js?apiKey=abc123被要求时:abc123在数据库中查找密钥,并获取该密钥的有效域列表。查找CSRF验证cookie。如果不存在,则生成一个安全的随机值,并将其放入仅HTTP的会话cookie中。如果cookie存在,则获取现有的随机值。从API密钥创建CSRF令牌,从cookie创建随机值,并对其签名。(我们不是在服务器上保留令牌列表,而是对值进行签名。两个值都可以在签名的令牌中读取,这很好。)将响应设置为不缓存,添加cookie,然后返回如下脚本:var apiConfig = apiConfig || {};if(document.domain === 'expected-domain.com'       || document.domain === 'www.expected-domain.com') {    apiConfig.csrfToken = 'API key, random value, signature';    // Invoke a callback if the partner wants us to    if(typeof apiConfig.fnInit !== 'undefined') {        apiConfig.fnInit();    }} else {    alert('This site is not authorised for this API key.');}笔记:以上并不妨碍服务器端脚本编造一个请求,但只有保证了域匹配,如果浏览器请求。在JavaScript的同源策略确保浏览器无法使用XHR(阿贾克斯)加载,然后检查JavaScript源。相反,常规浏览器只能使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值