吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2150|回复: 1
收起左侧

[Java 转载] java飞书鉴权(对接前端飞书云文档组件)

[复制链接]
三木猿 发表于 2022-9-16 14:19
本帖最后由 三木猿 于 2022-9-16 14:28 编辑

飞书开放平台目前的全网很难搜到相关的教程,我这边也是慢慢摸索出来的,可能是全网首发了
已同步发布在个人博客:http://www.sanmu.xyz/blog/7
本文基于飞书云文档组件API,地址为https://open.feishu.cn/document/ ... iN3cjN/introduction 我这里主要讲一下后端SDK鉴权流程和对接云文档组件遇到的一些问题 https://open.feishu.cn/document/uYjL24iN/uUDO3YjL1gzN24SN4cjN
1.准备工作 前端想要使用云文档组件必须先在开发者后台开通权限
其中前两个是后端获取文件内容需要的权限,如果只用云文档组件不需要获取文件内容则不需要 最后一个是云文档组件必须要开启的,之前因为疏忽没有注意到这个,真实踩过这个坑 ,

原文截图:

这个权限如果没开启前端使用时会报错:
[Java] 纯文本查看 复制代码
 {code:9,msg:"permission Scope Required"} 

并且这个报错在文档里是找不到原因的,别问我为啥知道
2.鉴权
[JavaScript] 纯文本查看 复制代码
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代码可以参考:
[Java] 纯文本查看 复制代码
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要和生成时的一致 最后将所有参数返回给前端,鉴权就结束了。剩下的就靠前端去弄吧=-=

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

CreatorHusky 发表于 2022-9-16 18:34
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 15:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表