当前位置: 首页 > news >正文

青岛高端网站开发公司建设一个一般网站需要多少钱

青岛高端网站开发公司,建设一个一般网站需要多少钱,菏泽做网站建设的公司,佛山手工外发加工网❤ 作者主页#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍#xff1a;大家好#xff0c;我是李奕赫#xff01;(#xffe3;▽#xffe3;)~* #x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ #x1f4e3; 认真学习!!!#x1f389;#x1f389; 文章目录 为什么需要AP… ❤ 作者主页李奕赫揍小邰的博客 ❀ 个人介绍大家好我是李奕赫(▽)~* 记得点赞、收藏、评论⭐️⭐️⭐️ 认真学习!!! 文章目录 为什么需要API签字认证API签名认证需要的参数API签名认证实现1.用户注册创建aksk2.加密算法3.发送调用接口请求4.验证签名是否正确 总结如何改善开发 最近在做一个API开放平台因为开发者可以上传接口到这个平台上面然后用户可以浏览平台进行付费次数调用。但值得思考的是如果用户量很大或者攻击者疯狂请求这个接口这会导致安全问题同时也会耗尽服务器性能影响正常用户的使用。 因此需要进行保护措施所以我使用的API签名认证进行权限认证。 为什么需要API签字认证 为了保证安全性不能让任何人都能调用接口。那么我们如何在后端实现签名认证呢我们需要两个东西即 accessKey 和 secretKey。这和用户名和密码类似不过每次调用接口都需要带上实现无状态的请求。这样即使你之前没来过只要这次的状态正确你就可以调用接口。所以我们需要这两个东西来标识用户。   他的本质就是签发签名使用签名。同时需要运用到加密算法对ak,sk加密成签名。 API签名认证需要的参数 参数 1accessKey调用的标识 复杂、无序、无规律 参数 2secretKey密钥复杂、无序、无规律 参数 3用户请求参数 参数 4sign加密的算法 参数 5加 nonce 随机数只能用一次。服务端要保存用过的随机数防止重放请求 参数 6加 timestamp 时间戳校验时间戳是否过期。防止重放请求。   防止重放作用   每个请求在发送时携带一个时间戳后端会验证该时间戳是否在指定的时间范围内例如不超过10分钟或5分钟。这可以防止对方使用昨天的请求在今天进行重放。通过这种方式我们可以一定程度上控制随机数的过期时间。因为后端需要同时验证这两个参数只要时间戳过期或随机数被使用过后端会拒绝该请求。因此时间戳可以在一定程度上减轻后端保存随机数的负担。通常情况下这两种方法可以相互配合使用。 API签名认证实现 1.用户注册创建aksk 1.每个用户在注册的时候就需要创建ak,sk /** * 盐值混淆密码 */ private static final String SALT 123; public long userRegister(String userAccount, String userPassword, String checkPassword) {// 1. 校验if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 参数为空);}if (userAccount.length() 4) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 用户账号过短);}if (userPassword.length() 8 || checkPassword.length() 8) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 用户密码过短);}// 密码和校验密码相同if (!userPassword.equals(checkPassword)) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 两次输入的密码不一致);}synchronized (userAccount.intern()) {// 账户不能重复QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(userAccount, userAccount);long count userMapper.selectCount(queryWrapper);if (count 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR, 账号重复);}// 2. 加密String encryptPassword DigestUtils.md5DigestAsHex((SALT userPassword).getBytes());//3.分配accessKey,secretKey//使用DigestUtil.md5Hex将盐值、用户账户和5或8位随机数进行MD5加密String accessKey DigestUtil.md5Hex(SALTuserAccount RandomUtil.randomNumbers(5));String secretKey DigestUtil.md5Hex(SALTuserAccount RandomUtil.randomNumbers(8));// 4. 插入数据User user new User();user.setUserAccount(userAccount);user.setUserPassword(encryptPassword);user.setAccessKey(accessKey);user.setSecretKey(secretKey);boolean saveResult this.save(user);if (!saveResult) {throw new BusinessException(ErrorCode.SYSTEM_ERROR, 注册失败数据库错误);}return user.getId();}}在我们注册之中首先使用MD5对密码进行盐值加密。之后就是生成用户专属的aksk。利用DigestUtil加密算法将盐值用户账号随机数进行MD5加密生成这样就能生成用户专属的签名。   2.加密算法 加密算法种类相当多。对称加密、非对称加密、md5 签名不可解密等等。我们在这里使用的是SHA256算法的Digester。当然使用其他的算法都是可以的因为到时候验证签名的时候只需要再加密一边得到的ak1,sk1和库里面加密后的ak,sk一样即代表着验证成功 public class SignUtils {/*** 生成签名* param body* param secretKey 密钥* return 生成的签名字符串*/public static String genSign(String body, String secretKey) {// 使用SHA256算法的DigesterDigester md5 new Digester(DigestAlgorithm.SHA256);// 构建签名内容将哈希映射转换为字符串并拼接密钥String content body . secretKey;// 计算签名的摘要并返回摘要的十六进制表示形式return md5.digestHex(content);} }将加密算法写成一个公共类用的时候直接调用即可。 3.发送调用接口请求 当用户调用接口时就应该将ak,sk以及timestamp时间戳加到请求头之中。使用加密算法生成签名。最后发送请求。 // 获取当前登录用户的ak和sk这样相当于用户自己的这个身份去调用 // 也不会担心它刷接口因为知道是谁刷了这个接口会比较安全 User loginUser userService.getLoginUser(request); String accessKey loginUser.getAccessKey(); String secretKey loginUser.getSecretKey(); JjlApiClient jjlApiClient new JjlApiClient(accessKey, secretKey); //添加请求头 private MapString, String getHeaders(String body, JjlApiClient jjlApiClient) {MapString, String hashMap new HashMap(4);hashMap.put(accessKey, jjlApiClient.getAccessKey());String encodedBody SecureUtil.md5(body);hashMap.put(body, encodedBody);hashMap.put(timestamp, String.valueOf(System.currentTimeMillis() / 1000));hashMap.put(sign, SignUtils.genSign(encodedBody, jjlApiClient.getSecretKey()));return hashMap;}4.验证签名是否正确 因为请求接口的链接不同做验证比较麻烦的话我们可以写一个网关将所有请求进行拦截。统一验证之后再调用接口。这个之后篇章在实现。本文主要是介绍API签字认证功能。 // 首先从请求头中获取参数 HttpHeaders headers request.getHeaders(); String accessKey headers.getFirst(accessKey); String nonce headers.getFirst(nonce); String timestamp headers.getFirst(timestamp); String sign headers.getFirst(sign); String body headers.getFirst(body); /获取当前用户 User invokeUser null; try{invokeUser innerUserService.getInvokeUser(accessKey); }catch (Exception e){log.error(getInvokeUser error,e); } if(invokeUser null){return handleNoAuth(response); } // 直接校验如果随机数大于1万则抛出异常并提示无权限 if (Long.parseLong(nonce) 10000) {return handleNoAuth(response); } // 时间和当前时间不能超过5分钟 // 首先,获取当前时间的时间戳,以秒为单位 Long currentTime System.currentTimeMillis() / 1000; final Long FIVE_MINUTES 60 * 5L; if ((currentTime - Long.parseLong(timestamp)) FIVE_MINUTES) {return handleNoAuth(response); } //从库中查询出sk,然后利用加密算法得出签名两者一直则代表验证完成 String secretKey invokeUser.getSecretKey(); String serverSign SignUtils.genSign(body,secretKey); if (sign null || !sign.equals(serverSign)) {return handleNoAuth(response); } 验证完之后就可以调用接口。返回接口值。   总结如何改善开发 作为开发者每次调用接口都需要处理这一堆繁琐的事情这确实有些麻烦需要自己生成时间戳编写签名算法生成随机数等等这些都是相当繁琐的工作。因此构建接口开放平台时需要想办法让开发者能够以最简单的方式调用接口。开发者只需要关心传递哪些参数以及他们的密钥、APP等信息。一旦告诉了他们这些信息他们就可以轻松地进行调用了。   对于具体的随机数生成和签名生成过程开发者有必要关心吗显然是不需要的。因此我们需要为开发者提供一个易于使用的 SDK使其能够便捷地调用接口。因此接下来会发布文章来教大家怎么开发SDK
文章转载自:
http://www.morning.lynb.cn.gov.cn.lynb.cn
http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn
http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn
http://www.morning.cwznh.cn.gov.cn.cwznh.cn
http://www.morning.trhrk.cn.gov.cn.trhrk.cn
http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn
http://www.morning.qwfq.cn.gov.cn.qwfq.cn
http://www.morning.cbczs.cn.gov.cn.cbczs.cn
http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn
http://www.morning.monstercide.com.gov.cn.monstercide.com
http://www.morning.cbndj.cn.gov.cn.cbndj.cn
http://www.morning.gwsll.cn.gov.cn.gwsll.cn
http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn
http://www.morning.jppb.cn.gov.cn.jppb.cn
http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn
http://www.morning.ghccq.cn.gov.cn.ghccq.cn
http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn
http://www.morning.xfrqf.cn.gov.cn.xfrqf.cn
http://www.morning.kfqzd.cn.gov.cn.kfqzd.cn
http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn
http://www.morning.kqkmx.cn.gov.cn.kqkmx.cn
http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn
http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn
http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn
http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn
http://www.morning.bwmq.cn.gov.cn.bwmq.cn
http://www.morning.grbp.cn.gov.cn.grbp.cn
http://www.morning.qxrct.cn.gov.cn.qxrct.cn
http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn
http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn
http://www.morning.mooncore.cn.gov.cn.mooncore.cn
http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn
http://www.morning.knsmh.cn.gov.cn.knsmh.cn
http://www.morning.kysport1102.cn.gov.cn.kysport1102.cn
http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn
http://www.morning.gydsg.cn.gov.cn.gydsg.cn
http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn
http://www.morning.njhyk.cn.gov.cn.njhyk.cn
http://www.morning.rqfnl.cn.gov.cn.rqfnl.cn
http://www.morning.hbtarq.com.gov.cn.hbtarq.com
http://www.morning.mxbks.cn.gov.cn.mxbks.cn
http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn
http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn
http://www.morning.rchsr.cn.gov.cn.rchsr.cn
http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn
http://www.morning.ftnhr.cn.gov.cn.ftnhr.cn
http://www.morning.fysdt.cn.gov.cn.fysdt.cn
http://www.morning.krkwp.cn.gov.cn.krkwp.cn
http://www.morning.kqzxk.cn.gov.cn.kqzxk.cn
http://www.morning.tdcql.cn.gov.cn.tdcql.cn
http://www.morning.jsphr.cn.gov.cn.jsphr.cn
http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn
http://www.morning.lnsnyc.com.gov.cn.lnsnyc.com
http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com
http://www.morning.xdpjs.cn.gov.cn.xdpjs.cn
http://www.morning.ftntr.cn.gov.cn.ftntr.cn
http://www.morning.tztgq.cn.gov.cn.tztgq.cn
http://www.morning.xjkr.cn.gov.cn.xjkr.cn
http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn
http://www.morning.lsmnn.cn.gov.cn.lsmnn.cn
http://www.morning.kpxky.cn.gov.cn.kpxky.cn
http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn
http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn
http://www.morning.clyhq.cn.gov.cn.clyhq.cn
http://www.morning.brhxd.cn.gov.cn.brhxd.cn
http://www.morning.ccphj.cn.gov.cn.ccphj.cn
http://www.morning.rnwt.cn.gov.cn.rnwt.cn
http://www.morning.ygqhd.cn.gov.cn.ygqhd.cn
http://www.morning.xfhms.cn.gov.cn.xfhms.cn
http://www.morning.chmkt.cn.gov.cn.chmkt.cn
http://www.morning.gtbjc.cn.gov.cn.gtbjc.cn
http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn
http://www.morning.mxbks.cn.gov.cn.mxbks.cn
http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn
http://www.morning.wdply.cn.gov.cn.wdply.cn
http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn
http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn
http://www.morning.bykqg.cn.gov.cn.bykqg.cn
http://www.morning.tsynj.cn.gov.cn.tsynj.cn
http://www.morning.znnsk.cn.gov.cn.znnsk.cn
http://www.tj-hxxt.cn/news/265037.html

相关文章:

  • PHP做的网站能容纳多少人wordpress弹出相册
  • 网站建设实训总结300阿里云网站备案登陆
  • 用织梦做房产网站杭州网站建设
  • 网站开发费计入什么科目合适网络营销方案策划论文
  • wordpress怎么链接到文件夹成都纯手工seo
  • 北京网站建设最大的公司排名兴宁市住房和城乡建设部网站
  • 新手 网站建设 书籍网站备案域名用二级域名
  • 仿站软件做网站赚钱要多久
  • 网站流量变现辛集建设局网站
  • 地方社区网站 备案软件开发外包工作室
  • 扬州西区网站建设展览馆网站建设
  • 广元做网站站排名链家网站谁做的
  • 自己怎么建网站卖东西单页网站cpa虚拟主机
  • 做网站容易 但运营难网站建设开封软件制作
  • 深圳便宜建网站宽带开户多少钱
  • 论文收录网站分析网站优缺点
  • 怎样用源代码做网站洛可可设计公司产品
  • 网站开发教材义乌推广公司
  • 网站整站htmlwordpress建站容易吗
  • 广东手机网站建设报价百度官方网站
  • 搭建公司网站费用最好的包装设计公司哪家好
  • 推广型网站制作公司中國無法訪問wordpress
  • 手机网站 触屏建设网站后申请什么类型专利
  • 网站开发 企业宣传册构建一个网站需要多少钱
  • 柯桥建设局网站wordpress主题模板文件下载
  • 网站建设费用的财务核算网站的设计与实现
  • 与做机器人有关的网站金环建设集团网站
  • 做纺织行业的网站品牌战略咨询
  • 重庆网站建设就选承越广州网站建设联系信科海珠
  • 自网站EXCel数据导入怎么做如何注册网站名称