开启Token鉴权后,只有使用Token加签的访问者才允许访问应用。下文介绍如何配置Token鉴权。
背景信息
Token指系统颁发给应用的随机码,作用类似于安全证书。使用Token信息进行签名,可以让系统快速核验访问者身份,保证安全性。
使用Web可视化工作台开发的应用,默认访问时不会进行安全验证。为保证安全,如信息安全、设备控制保护等,可以开启Token鉴权。
将Web应用嵌入到第三方网站或应用(如Web后台、移动App等)的场景下,建议开启。
重要 Token鉴权是针对其他访问者访问应用时,增加的一层安全防护。而允许其他访问者访问Web应用的首要条件,是完成域名绑定配置。详细内容请参见
域名管理。
开启应用鉴权
- 登录物联网应用开发控制台,在页面左上角选择对应实例后,在左侧导航栏单击应用开发。
您也可登录
物联网平台控制台,在左侧导航栏选择
增值服务,单击
选购增值服务中的
前往查看服务,在
增值服务中心,单击
IoT Studio区域的
立即试用,进入IoT Studio控制台。
- 在最近开发的Web应用列表,找到目标应用,单击应用名称。
- 在Web可视化应用编辑器左侧导航栏,单击应用设置按钮。
- 在应用设置的应用鉴权页签下,单击Token前的选择按钮,并在确认弹窗中,单击开启。
开启Token后,系统会为该应用自动生成Token,单击查看图标即可显示。
- 集成应用的访问地址URL。
开启Token后,用户便不能通过原来的URL直接访问您的应用页面。您需要在URL中集成Token加签信息。
- 将当前时间(毫秒)转化为字符串。
- 使用Token,通过HMAC-SHA256 base64对上一步得到的字符串进行加密。
说明 为保证应用的安全性,计算出来的签名(signature)有效期为32个小时。32小时之后,需要重新计算新的签名(signature)。
- 将时间和加密得到的签名分别命名为time和signature,并放入到URL的querystring中。
- 测试。
使用含有Token加签的URL访问应用。
以下是集成访问地址的代码示例。
- PHP示例代码:
<?php
$token = "54cc8224a92ddda750600157e17b****";
$time = time()*1000;
$stringToSign = strval($time);
$signature = urlencode(base64_encode(hash_hmac('sha256', $stringToSign, $token, true)));
$url = "http://${应用访问地址}"."?time=".$time."&signature=".$signature;
?>
<iframe width=100% height=100% src="<?=$url?>"/>
- Node.js示例代码:
const crypto = require('crypto');
var token = "54cc8224a92ddda750600157e17b****";
var time = Date.now();
var stringToSign = time.toString();
var signature = crypto.createHmac('sha256', token).update(stringToSign).digest().toString('base64');
var url="http://${应用访问地址}"+"?time="+time+"&signature="+ encodeURIComponent(signature);
- Java示例代码:
package com.company;
import java.security.*;
import java.util.Date;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.URLEncoder;
/**
* Created by studio on 2019/4/3.
*/
public class TokenTest {
public static String getSignedUrl(String token){
Date date = new Date();
Long time = date.getTime();
String stringToSign = String.valueOf(time);
String signature = HMACSHA256(stringToSign.getBytes(), token.getBytes());
String url = "http://${应用访问地址}"+"?time="+time+"&signature="+ signature;
return url;
}
/**
* 利用Java原生的摘要实现SHA256加密
* @param str 加密后的报文
* @return
*/
public static String HMACSHA256(byte[] data, byte[] key)
{
try {
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
return URLEncoder.encode(byte2Base64(mac.doFinal(data)));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
private static String byte2Base64(byte[] bytes){
return Base64.encodeBase64String(bytes);
}
public static void main(String[] args) throws Exception {
String token = "54cc8224a92ddda750600157e17b****";
System.out.println(getSignedUrl(token));
}
}
开启应用实例Token鉴权
应用发布后,新增绑定设备生成的应用实例可继承应用的Token,也支持生成单独的Token或关闭Token鉴权。
- 在应用编辑器左侧导航栏,单击设备绑定管理按钮。
应用绑定设备页显示所有已绑定设备的配置(即应用实例)。一个设备配置即生成一个独立的应用实例。
如果您要新增应用实例,可单击新建设备配置,然后绑定设备。设备配置操作说明,请参见批量绑定设备。
- 在应用绑定设备页,单击设备配置名称对应的Token配置。
- 在Token设置页,选择以下配置方式,单击确定。