历史版本5 :数字签名认证 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1、描述编辑

原理:

  • 数字签名是以电子的形式存在于数据信息中,或者是作为附件,或者是逻辑上与之有联系的数据,可用于辨别使用人的身份,保证数据的安全性。目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是:报文的发送方从报文文本中生成一个 128 位的散列值(或报文摘要)。

  • 发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。这个数字签名将作为报文的附件和报文一起发送给报文的接收方。

  • 报文的接收方首先从接收到的原始报文中计算出 128 位的散列值(或报文摘要),再用发送方的公用密钥来对报文附加的数字签名进行解密。

  • 如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。

21.png

功能介绍:

  • 通过数字签名的方式来验证访问的模板请求,FineBI通过数字签名验证签名信息合法才允许访问模板,否则返回没有权限。

应用场景:

  • 通过数字签名密钥和对模板进行认证。访问模板时,需要在访问的 URL 的请求中,携带有认证服务器认证通过的数字签名密钥,参数名为 fine_digital_signature,URL 格式为:http://locaihost:37799/webroot/decision/v5/design/report/4fc4bc9c2a4a4083b5f4a5d8d632ccae/view?fine_digital_signature=值

  • 平台会根据签名来进行数字签名认证的判断,通过认证,显示模板,通不过认证,显示无权限。

2、操作步骤编辑

2.1 获取 fine_digital_signature 值

获取对应的数字签名密钥的fine_digital_signature值,这里以公司综合运营管理驾驶舱模板(模板id为4fc4bc9c2a4a4083b5f4a5d8d632ccae)为例:

import com.fr.cert.token.JwtBuilder;
import com.fr.cert.token.Jwts;
import com.fr.cert.token.SignatureAlgorithm;
import java.util.Date;
public class Test2 {
   public static void main(String[] args) {
       //数字签名有效时长
       long validTime = 30 * 60 * 1000;
       //数字签名内容,以访问资源的相对路径作为内容
       String path = "4fc4bc9c2a4a4083b5f4a5d8d632ccae";
       String key = "abc"; //数字签名密钥,可以自定义
       //生成fine_digital_signature
       String fine_digital_signature = createJwt("", "", path, validTime, key);
       //输出fine_digital_signature
       System.out.println(fine_digital_signature);
   }
   private static String createJwt(String issuer, String id, String subject, long validTime, String key) {
       //用于生成数字签名,即参数fine_digital_signature的值
       SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
       Date currentTime = new Date();
       Date expirationTime = new Date(currentTime.getTime() + validTime);
       JwtBuilder builder = Jwts.builder()
               .setIssuer(issuer)
               .setSubject(subject)
               .setIssuedAt(currentTime)
               .setExpiration(expirationTime)
               .setId(id)
               .signWith(signatureAlgorithm, key);
       return builder.compact();
   }
}

1、需要提前准备java环境及IDE工具并创建一个class文件,将上述代码复制至创建的文件中,修改需要进行数字签名的模板并自定义数字签名密钥,如下图:

4.png

2、将%FineBI%/webapps/webroot/WEB-INF/lib下的所有jar包导入新建的工程中,如下动图:

2019-10-25_15-58-01.gif

3、运行Test2文件并获得数字签名密钥的fine_digital_signature值,如下图:

5.png

2.2 平台设置

管理员登录FineBI,点击管理系统>模板认证,选择全局配置,选择认证方式为数字签名认证,设置数字签名密钥,例如:abc,如下所示:

6.png

2.3 预览效果

首先访问直接访问:http://localhost:37799/webroot/decision/v5/design/report/4fc4bc9c2a4a4083b5f4a5d8d632ccae/view,提示没有权限;

在 URL 后面新增参数:?fine_digital_signature=值,如http://localhost:37799/webroot/decision/v5/design/report/4fc4bc9c2a4a4083b5f4a5d8d632ccae/view?fine_digital_signature=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0ZmM0YmM5YzJhNGE0MDgzYjVmNGE1ZDhkNjMyY2NhZSIsImlhdCI6MTU3MTk5MTM2OCwiZXhwIjoxNTcxOTkzMTY4LCJqdGkiOiIifQ.uPwNMzPaqeS228zsSjOH6xhPw8D8pdG1ugdUi3ThEmw

即可正常查看模板。

2019-10-25_16-35-17.gif