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

中盛浩瀚建设有限公司网站长沙航科网页制作

中盛浩瀚建设有限公司网站,长沙航科网页制作,企业网站建设方案价格,邢台网站建设哪家专业前言 当前时代#xff0c;数据是王道#xff01;当我们自己的平台有了足够大的数据量#xff0c;就有可能诞生一个开放平台宫第三方分析、使用。那么我们怎么去实现对外部调用接口的控制与鉴权呢#xff1f;这是我们今天的重点——接口签名认证#xff01;#xff01;数据是王道当我们自己的平台有了足够大的数据量就有可能诞生一个开放平台宫第三方分析、使用。那么我们怎么去实现对外部调用接口的控制与鉴权呢这是我们今天的重点——接口签名认证 签名认证 开放平台会为每一位注册用户分配一个对应账户API KEY和秘钥API SECRET。我们为了保证接口的安全性用户在每次接口的调用都需要上传一个所谓的签名基于API KEY和API SECRET获取 签名认证步骤 首先生成一个Unix时间戳timestamp,时间精确到毫秒【即1970年1月1日UTC/GMT的午夜开始所经过的毫秒数】生成随机数nonce(注目前定义的是32位的可以通过随机数工具类生成) ;1将timestamp、nonce、API_KEY 这三个字符串依据“字符串首位字符的ASCII码”进行升序排列排序过程中若出现ASCII码值相同的情况则依次递增对下一位进行比较这种排序”也就是俗称的字典序“并将排序后的结果拼接成为一个字符串join_str 2接下来在用API_SECRET对上面生成这个字符串join_str做hmac-sha256 签名并且以16进制编码得到signature将上述得到的timestampnonce,signature与 API_KEY按照 #{k}#{v}并以 , 为区分拼接在一起形成新的字符串这就是要返回签名认证字符串authorization;当完成以上4步我们就可以获取最终的签名认证字符串了。调用接口时将通过签名认证步骤得到的值authorization 传给HTTP HEADER的Authorization对应的值请求体部分按照相对应文档请求参数说明正确填写正常发送请求即可完成一次接口调用。 下面以java代码举例 假设 API_KEY 233453f1d1eb4eb5a5ad9c8dac0d02cc; API_SECRET 444af44cd3a247c594438fb60d7b1d52; 1. 获得timestamp(unix时间戳)返回timestamp 1633431976787 实现方式: String timestamp Long.toString(System.currentTimeMillis());  2. 获得随机nonce返回nonce 3isQFsTjsnNOLvIPXhf3HlW17WSfQqp9 可用下面方式实现 String nonce RandomStringUtils.randomAlphanumeric(32); 3.将timestamp、nonce、API_KEY 这三个字符串依据“字符串首位字符的ASCII码”进行升序排列排序过程中若出现ASCII码值相同的情况则依次递增对下一位进行比较并join成一个字符串返回join_str:1633431976787233453f1d1eb4eb5a5ad9c8dac0d02cc3isQFsTjsnNOLvIPXhf3HlW17WSfQqp9 可用下面方式实现: public static String genOriString(String timestamp,String nonce,String API_KEY){ArrayListString beforesort new ArrayListString();beforesort.add(API_KEY);beforesort.add(timestamp);beforesort.add(nonce);Collections.sort(beforesort, new SpellComparator());StringBuffer aftersort new StringBuffer();for (int i 0; i beforesort.size(); i) {aftersort.append(beforesort.get(i));}String join_str aftersort.toString();return join_str;} 4. 用API_SECRET对join_str做hmac-sha256签名且以16进制编码返回signature:7d37d14406323f0ab30d1d4db1e7f2eb27abac42f3de00d619025108fa6cd5e4 可用下面方式实现 public static String genEncryptString(String join_str, String API_SECRET){Key sk new SecretKeySpec(API_SECRET.getBytes(), HmacSHA256);Mac mac Mac.getInstance(sk.getAlgorithm());mac.init(sk);final byte[] hmac mac.doFinal(join_str.getBytes());//完成hmac-sha256签名StringBuilder sb new StringBuilder(hmac.length * 2);Formatter formatter new Formatter(sb);for (byte b : hmac) {formatter.format(%02x, b);}String signature sb.toString();//完成16进制编码return signature;} 5. 将上述的值按照 #{k}#{v} 并以 , join在一起返回签名认证字符串 key2371d3f1d1eb4eb5a5ad9c8dac0d02cc,timestamp1638431976741,nonce3isWSsTjsnNOLvIPXhf3HlW17WSfQqp9,signature7d37d14406323f0ab30d1d4db1e7f2eb27abac42f3de00d619025108fa6cd5e4 可用下面方式实现 public static String genauthorization(String API_KEY, String timestamp, String nonce, String signature){String authorization key API_KEY,timestamp timestamp,nonce nonce,signature signature;return authorization;} 6. 将该签名认证字符串赋值给HTTP HEADER 的 Authorization 中完成一次接口访问。 DEMO pom文件中添加一下支持 dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.12.0/version/dependencydependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpmime/artifactIdversionRELEASE/versionscopecompile/scope/dependency 具体实现代码 import java.util.Comparator;public class SpellComparator implements ComparatorObject {public int compare(Object o1, Object o2) {try{String s1 new String(o1.toString().getBytes(GB2312), ISO-8859-1);String s2 new String(o2.toString().getBytes(GB2312), ISO-8859-1);return s1.compareTo(s2);}catch (Exception e){e.printStackTrace();}return 0;} }import java.io.IOException; import java.security.InvalidKeyException; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SignatureException; import java.util.ArrayList; import java.util.Collections; import java.util.Formatter; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.client.ClientProtocolException;public class GenerateString {// 开放平台注册获取idAPI KEYpublic static final String id 22bfe9745135;// 开放平台注册获取密钥API SECRETpublic static final String secret 19fbdc10;private static final String HASH_ALGORITHM HmacSHA256;static String timestamp Long.toString(System.currentTimeMillis());static String nonce RandomStringUtils.randomAlphanumeric(32);public static String genOriString(String api_key){ArrayListString beforesort new ArrayListString();beforesort.add(api_key);beforesort.add(timestamp);beforesort.add(nonce);Collections.sort(beforesort, new SpellComparator());StringBuffer aftersort new StringBuffer();for (int i 0; i beforesort.size(); i) {aftersort.append(beforesort.get(i));}String OriString aftersort.toString();return OriString;}public static String genEncryptString(String genOriString, String api_secret)throws SignatureException {try{Key sk new SecretKeySpec(api_secret.getBytes(), HASH_ALGORITHM);Mac mac Mac.getInstance(sk.getAlgorithm());mac.init(sk);final byte[] hmac mac.doFinal(genOriString.getBytes());StringBuilder sb new StringBuilder(hmac.length * 2);SuppressWarnings(resource)Formatter formatter new Formatter(sb);for (byte b : hmac) {formatter.format(%02x, b);}String EncryptedString sb.toString();return EncryptedString;}catch (NoSuchAlgorithmException e1){throw new SignatureException(error building signature, no such algorithm in device HASH_ALGORITHM);}catch (InvalidKeyException e){throw new SignatureException(error building signature, invalid key HASH_ALGORITHM);}}public static String genHeaderParam(String api_key, String api_secret) throws SignatureException{String GenOriString genOriString(api_key);String EncryptedString genEncryptString(GenOriString, api_secret);String HeaderParam key api_key,timestamp timestamp,nonce nonce,signature EncryptedString;System.out.println(HeaderParam);return HeaderParam;}public static void main(String[] args) throws ClientProtocolException, IOException, SignatureException{String s genHeaderParam(id, secret);System.out.println(s);} }好了今天关于开放平台之接口认证鉴权就到这里。 欢迎大家点击下方卡片关注《coder练习生》
http://www.hkea.cn/news/14498173/

相关文章:

  • jquery 单击input输入框弹出选择框多用于人才类网站西安公司网站建设
  • 什么网站有教做变蛋的多方会议系统平台
  • 网站建设属于无形资产吗html5响应式布局网站
  • 优化网站平台深圳500强企业排行榜
  • 网页设计与网站建设 公开课微信公众号调用WordPress
  • html网站开发基础wordpress创建登录页面模板
  • 太仓网站制作哪家好做网站怎么引流
  • 广东网页空间网站页面设计成上下两栏
  • 域名的网站建设方案书医疗方面的网站建设
  • 周浦网络网站建设公司杭州网站推广平台
  • 电子商务网站建设和管理的意义北京最大的设计公司
  • 芜湖做网站需要多少钱公司广告宣传片拍摄
  • 鱼台建设局网站石泉县城乡建设局网站
  • 网站开发的未来展望做网站公司昆明
  • 杭州萧山做网站二级域名怎么解析
  • 羊坊店网站建设网站设计依赖于什么设计
  • 用dw做的网站怎样弄上网上新乡seo推广
  • 商标设计网站免费it运维前景怎么样
  • wordpress主题grace主题网站建设优化seo
  • 长沙网站设计公司推荐青岛网站设计品牌企业
  • 简单描述网站建设流程网站网页优化技巧
  • 图片站wordpress广州微信小程序开发工作室
  • 呢图网站场建设封面网站建设的市场规模
  • 网上做翻译兼职网站山东天成水利建设 网站
  • 怎么知道一个网站的权重网站备案 强制
  • 网站主题咋做wordpress页脚修改
  • 插画素材网站有哪些wordpress导购淘宝客主题
  • 海口建设公司网站wordpress 经常打不开
  • 融安有那几个网站做的比较好的网站连通率
  • 毕业设计可以做网站不好看个人网页模板