java飞书鉴权(对接前端飞书云文档组件)

本文基于飞书云文档组件API,地址为https://open.feishu.cn/document/uYjL24iN/uYDO3YjL2gzN24iN3cjN/introduction 我这里主要讲一下后端SDK鉴权流程和对接云文档组件遇到的一些问题 https://open.feishu.cn/document/uYjL24iN/uUDO3YjL1gzN24SN4cjN

  1. 准备工作 前端想要使用云文档组件必须先在开发者后台开通权限正在上传…重新上传取消其中前两个是后端获取文件内容需要的权限,如果只用云文档组件不需要获取文件内容则不需要 最后一个是云文档组件必须要开启的,之前因为疏忽没有注意到这个,真实踩过这个坑 ,原文截图:

    这个权限如果没开启前端使用时会报错: {code:9,msg:"permission Scope Required"} 并且这个报错在文档里是找不到原因的,别问我为啥知道
  2. 鉴权
window.webComponent.config({
  openId,    // 当前登录用户的open id,要确保与生成 signature 使用的 user_access_token 相对应,使用 app_access_token 时此项不填。
  signature, // 签名
  appId,     // 应用 appId
  timestamp, // 时间戳(毫秒)
  nonceStr,  // 随机字符串
  url,       // 参与签名加密计算的url
  jsApiList, // 指定要使用的组件,请根据对应组件的开发文档填写。如云文档组件,填写['DocsComponent']
  lang,      // 指定组件的国际化语言:en-英文、zh-中文、ja-日文
}).then(res=>{
  // 可以在这里进行组件动态渲染
})

以上为前端鉴权代码,可以看到需要后端传的字段为openId,appId,signature,timestamp,nonceStr,url

openId:只有用个人账号的形式去鉴权的时候才需要传,我这里是直接以app的身份去进行的鉴权,所以就不需要传。

appId:应用id,他的获取需要在开发者后台-创建企业自建应用,然后点击创建的应用进去在凭证与基础信息就能找到了

此时我们获取到了appId和AppSecret,这个最好是保存到后端的配置文件中 appId相当于用户名,所以可以在参数中传递,这个不用太过担心安全问题 timestamp:当前时间戳,取当前时间就行 nonceStr:随机字符串,数字与字母组合,这个使用UUID去掉-就行 url:调用界面的url,参考以下飞书的描述signature:signature放到最后来说,这个是最重要的,篇幅有限,具体步骤请参考飞书: https://open.feishu.cn/document/uYjL24iN/uUDO3YjL1gzN24SN4cjN 其中需要注意的是: access_token是有过期时间的,在未过期时再次获取返回的access_token是不会变的,所以最好是缓存起来,比如放在redis,获取access_token的接口会返回过期时间,就很方便 jsapi_ticket也是有过期时间和使用次数限制的,单次获取的jsapi_ticket只能用一次,也就是每次鉴权都需要使用新的,且过期时间为10分钟 Signature的生成使用sha1代码可以参考:

public static String encode(String str) {
        if (str == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(str.getBytes());
            byte[] digest = messageDigest.digest();
            StringBuilder sb = new StringBuilder();
            int len = digest.length;
            for (int j = 0; j < len; j++) {
                sb.append(CHARS[(digest[j] >> 4) & 15]);
                sb.append(CHARS[digest[j] & 15]);
            }
            return sb.toString();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

以上需要注意生成Signature传的timestamp和nonceStr要和返回给前端的一致,前端使用时的url要和生成时的一致 最后将所有参数返回给前端,鉴权就结束了。剩下的就靠前端去弄吧=-=

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值