泛微OA服务器获取 token

这篇具有很好参考价值的文章主要介绍了泛微OA服务器获取 token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

泛微OA服务器获取 token

对于获取 token,其实泛微官方的文档提供了方法,大致步骤是:数据库插入 appid-> 注册 -> 拿到 spk 和 secret 后加密作为 secret -> spk 和用户 id 加密才是真正的 userid -> 根据加密后的 secret 和 appid 获取 token。

整个步骤比较繁琐,此处本人演示原始泛微的方法和本人封装过后的简单方法。


一、泛微官方方法

泛微官方获取 token:https://e-cloudstore.com/doc.html

以下步骤与官方提供的方法存在重复,本次为了详细讲解也重复讲解。

1 ecology 系统配置

在ecology系统代码目录中找到以下配置文件:ecology/WEB-INF/prop/weaver_session_filter.properties

checkurl=/api/hrm/emmanager;/api/userPhrase;
uncheckurl=/api/ec/dev/app/getCheckSystemInfo;/api/ec/dev/app/emjoin;
unchecksessionurl=/api/ec/dev/util/accesspage;.../api/loginportal/element/;/api/edc/fillin/;

在 unchecksessionurl= 后面添加 /api/ec/dev/auth/regist;/api/ec/dev/auth/applytoken;配置后的白名单需要重启生效。


2 发放/生成许可证(appid)

向数据库插入一条记录,之后访问的话会匹配这条记录,用于身份认证,在ecology系统数据库执行以下脚本示例:

INSERT INTO ECOLOGY_BIZ_EC(ID,APPID,NAME) VALUES('123456','test','上海泛微网络科技股份有限公司');
COMMIT;

字段描述:

  • ID:数据库主键。保证与其它系统发放的许可证在数据库中的主键标识不冲突即可(对应示例:123456)
  • APPID:许可证号码。最终发放给异构系统的许可证号码,多个许可证号码保证唯一(对应示例:test)
  • NAME:许可证名称。用于快速辨识许可证发放系统(对应示例:上海泛微网络科技股份有限公司)

网络上提供了随机生成字母-数字的字符串,比如:http://tool.pfan.cn/random

随机生成一个 32 位的即可,也可以为其他位数,本次演示使用随机生成的:E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60


3 限制许可证使用ip地址(该步骤也可以跳过)

在ecology系统代码目录中找到以下配置文件:ecology/WEB-INF/prop/weaver_rest_token.properties

// 限制Rest API Token Invoke注册端IP地址,多个IP地址之间用逗号分隔
// 例如:allowIp=127.0.0.1,192.168.0.1,172.10.0.1,10.10.10.01
allowIp=

在 allowIp= 后面添加客户调用方服务器实际的ip地址(不设置将代表不限制任何ip,生产环境建议设置)


4 使用 postman 注册

注册接口:/api/ec/dev/auth/regist

在请求头里携带 appid,获取 spk 和 secret。

注意:spk 和 secret 只需要注册一次,如果重复注册则 spk 和 secret 会进行变化,获取 token 的时候也要记得更换 spk 和 secret。
泛微oa获取token,泛微OA,服务器,运维,java
拿到 spk 和 secret 后,加密 secret:

网址:https://the-x.cn/Cryptography/Rsa.aspx

泛微oa获取token,泛微OA,服务器,运维,java


5 获取 token

获取 token 接口:/api/ec/dev/auth/applytoken

步骤 4 拿到加密后的 secret 后,把 appid 和 secret 放在请求头内获取:

泛微oa获取token,泛微OA,服务器,运维,java

6 访问业务系统接口

步骤 5 拿到了 token,但此时只根据 token 还不能访问业务系统接口,需要具体的 userId,userId 也不是OA系统中人员的id,而是人员 id 和 spk 经过加密处理的字符串。

泛微oa获取token,泛微OA,服务器,运维,java

此处演示获取已处理流程列表,接口地址:/api/workflow/paService/getHandledWorkflowRequestList

泛微oa获取token,泛微OA,服务器,运维,java

成功访问了接口。


二、java 代码获取 token

appid、spk、加密后的 secret 都是方法一中第一次注册后的数据,需要记录直接使用。

依赖:

<!-- 万能工具包hutool -->
  <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.7.17</version>
  </dependency>
  
  <!-- fastjson -->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.66</version>
  </dependency>

代码:

public class TestGetToken {

    // 封装泛微获取 token 的接口
    public static void main(String[] args) {
        // 存入 token-appid-用户id加密后的scrict,返回给客户端
        Map<String, Object> apiData = new HashMap<>();
        // spk、Secret第一次注册就固定的参数,userid为测试写入
        String spk = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAixdL/I2LFv9pf77Ui8/raj2RiDvh+WPcMTW0h/zGs1JkWSA19AnqopmPdUWCfTm/KTF0m1SuWjJRk4T/l4SobUzDg6ZZtKbvjGa4mpcg1i6BIM4pfpL6zqF+xgAf+Zwz/w/cL1844ITzAgQZAQoFyRB8v3luGK/uq+9swAz/QuMsHfOw8mkGeTAo00xLd4I9kN1/UsbhXuIXR34e7SnMidJAd4NXVp60WuBjjaq2Rpp/3LdE/uZdeGkWpwN6/9ZHEAukW2NisUx3OlD7s2T4XGd3MoNX0gz+AvDutCp1WrD1ltbbaXyqrvMpsPkg3XaSTD/dTo8gYhIA4NcAGfUOqQIDAQAB";
        String Secret = "de4ab3cb-1b06-4dd4-9f1b-192d158b5114";

        String userId = "10795"; // 本人OA系统中的userid,在代码中直接写入测试
        String encryptUserId  = new RSA(null, spk).encryptBase64(userId, StandardCharsets.UTF_8, KeyType.PublicKey); // RSA加密

        // 公钥加密, 所以RSA对象私钥为null
        RSA rsa = new RSA(null, spk);
        // 对秘钥进行加密传输,防止篡改数据
        String encryptSecret = rsa.encryptBase64(Secret, StandardCharsets.UTF_8, KeyType.PublicKey);
        String result = httpRequest(apiData, encryptSecret, encryptUserId);
        System.out.println(JSONUtil.parseObj(result));
    }

    /**
     * 调用ECOLOGY系统接口进行注册
     * @param apiData
     * @param encryptSecret
     * @param encryptUserId
     * @return
     */
    private static String httpRequest(Map<String, Object> apiData, String encryptSecret, String encryptUserId) {
        String uri = "/api/ec/dev/auth/applytoken"; // 获取token接口
        String appid = "E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60"; // appid 为自定义插入数据库的appid,需与数据库保持一致

        String datas = HttpRequest.post("http://192.168.190.5:8080" + uri)
                .header("appid", appid)
                .header("secret", encryptSecret)
                .header("time", "3600") // 过期时间
                .execute().body();

        Map<String, Object> dataMap = JSONUtil.parseObj(datas);
        String token = (String) dataMap.get("token");
        apiData.put("appid", appid);
        apiData.put("token", token);
        apiData.put("encryptUserId", encryptUserId);
        return JSON.toJSONString(apiData);
    }

}

代码效果:
泛微oa获取token,泛微OA,服务器,运维,java


三、封装到 OA 系统获取 token

步骤二的方法相对于泛微提供的方法,已经做了很好的简化,但如果只想使用 postman 来获取,我们可以把获取 token 封装成一个接口,打包到 OA 系统中,这样就大大简化了获取 token 的步骤。

具体需求,使用 post 方法,在请求体内传入工号,通过工号获取 userid 获取 token,代码如下:

获取 token 步骤:

  • 1、数据库插入 appid
  • 2、ecology/WEB-INF/prop/weaver_session_filter.properties 配置token接口
  • 3、/api/ec/dev/auth/regist 请求头携带 appid 注册(返回secret、spk)
  • 4、/api/ec/dev/auth/applytoken 请求头携带 appid、加密后的 secret 获取 token
  • 5、拿到 token,spk 和 userid 加密后返回 userid,访问业务系统接口。

依赖:

<!-- 万能工具包hutool -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.17</version>
</dependency>

GetToKenByWorkCode .java

@Path("/test/testGetToken")
public class getToKenByWorkCode extends GetToKenByWorkCode {
}

LoginRegist.java

public class GetToKenByWorkCode {
    private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);

    @POST
    @Path("/getToKenByWorkCode")
    @Produces(MediaType.APPLICATION_JSON)
    public String ecPost(Map<String, Object> params) {
        Map<String, Object> apiData = new HashMap<>();
        String spk = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAixdL/I2LFv9pf77Ui8/raj2RiDvh+WPcMTW0h/zGs1JkWSA19AnqopmPdUWCfTm/KTF0m1SuWjJRk4T/l4SobUzDg6ZZtKbvjGa4mpcg1i6BIM4pfpL6zqF+xgAf+Zwz/w/cL1844ITzAgQZAQoFyRB8v3luGK/uq+9swAz/QuMsHfOw8mkGeTAo00xLd4I9kN1/UsbhXuIXR34e7SnMidJAd4NXVp60WuBjjaq2Rpp/3LdE/uZdeGkWpwN6/9ZHEAukW2NisUx3OlD7s2T4XGd3MoNX0gz+AvDutCp1WrD1ltbbaXyqrvMpsPkg3XaSTD/dTo8gYhIA4NcAGfUOqQIDAQAB";
        String appid = "E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60";
        String Secret = "de4ab3cb-1b06-4dd4-9f1b-192d158b5114";
        String workcode = params.get("workcode").toString();
        RecordSetDataSource rs = new RecordSetDataSource();
        String encryptUserId;
        rs.execute("select id from hrmresource where workcode='" + workcode + "'");
        if (rs.next()) {
            String userId = rs.getString("id");
            encryptUserId = new RSA(null, spk).encryptBase64(userId, StandardCharsets.UTF_8, KeyType.PublicKey);
        } else if ("1".equals(workcode)) {
            encryptUserId = new RSA(null, spk).encryptBase64("1", StandardCharsets.UTF_8, KeyType.PublicKey);
        } else {
            return "工号不存在";
        }
        final String uri = "/api/ec/dev/auth/applytoken";
        // 公钥加密,所以RSA对象私钥为null
        RSA rsa = new RSA(null, spk);
        //对秘钥进行加密传输,防止篡改数据
        String encryptSecret = rsa.encryptBase64(Secret, StandardCharsets.UTF_8, KeyType.PublicKey);

        //调用ECOLOGY系统接口进行注册
        String datas = HttpRequest.post("http://192.168.190.5:8080" + uri)
                .header("appid", appid)
                .header("secret", encryptSecret)
                .header("time", "3600")
                .execute().body();

        Map<String, Object> dataMap = JSONUtil.parseObj(datas);
        String token = (String) dataMap.get("token");
        apiData.put("appid", appid);
        apiData.put("token", token);
        apiData.put("encryptUserId", encryptUserId);
        return JSON.toJSONString(apiData);

    }
}

效果演示:

泛微oa获取token,泛微OA,服务器,运维,java
注意:记得把 /api/test/testGetToken/getToKenByWorkCode 这个接口配置在白名单中,白名单位置:ecology/WEB-INF/prop/weaver_session_filter.properties

泛微oa获取token,泛微OA,服务器,运维,java

如果需要使用 idea 打断点调试代码,可以在 /home/comen/weaver/Resin4/conf/resin.properties 中配置调试的端口:

泛微oa获取token,泛微OA,服务器,运维,java

然后在 idea 中配置,就可以调试指定服务器 ip 的代码:

泛微oa获取token,泛微OA,服务器,运维,java文章来源地址https://www.toymoban.com/news/detail-852268.html

到了这里,关于泛微OA服务器获取 token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 泛微OA的介绍以及实施计划

    泛微OA是中国领先的OA办公自动化产品商,是一套集OA、合作、工作流一体化的企业级信息化管理软件。它可以帮助企业实践现办公自动化、信息协同、决策智能化等功能,提升企业生产效率和管理水平,是企业数字化转型和数字化办公的好工具。 泛微OA提供了完整的办公自动

    2024年02月06日
    浏览(29)
  • 友空间自建应用 集成泛微OA移动端

    因公司领导要求,购买了用友的NCC21111的人力模块,然后移动端使用的友空间 发现贼不好用。 所以NCC能完成的人事功能放在了NCC上,完不成的放在了泛微OA ecology上。 现在人力总监想在友空间上 发起看到 那些OA系统上的人力相关流程 所以做了此开发 (审批 人事 移动端 低代码

    2024年02月16日
    浏览(28)
  • 泛微OA-E9和用友NCC单据接口对接

    用友NCCloud,大型企业数字化平台,聚焦数字化管理、数字化经营、数字化商业,帮助大型企业实现人、财、物、客的全面数字化,从而驱动业务创新与管理变革,与企业管理者一起重新定义未来的高度。 泛微数字化运营管理平台为组织提供从“可信数字身份、电子化流程审

    2024年02月15日
    浏览(25)
  • 大型集团借力泛微搭建语言汇率时区统一、业务协同的国际化OA系统

    国际化、全球化集团,业务遍布全世界,下属公司众多,集团对管理方式和企业文化塑造有着很高的要求。不少大型集团以数字化方式助力全球统一办公,深化企业统一管理。 面对大型集团全球化的管理诉求,数字化办公系统作为集团日常使用的平台,自然需要适应企业管理

    2024年02月07日
    浏览(31)
  • 漏洞复现 泛微OA E-Cology V9 browser.jsp SQL注入漏洞

    泛微新一代移动办公平台e-cology不仅组织提供了一体化的协同工作平台,将组织事务逐渐实现全程电子化,改变传统纸质文件、实体签章的方式。泛微OA E-Cology 平台browser.jsp处存在SQL注入漏洞,攻击者通过漏洞可以获取服务器数据库权限。 1.使用POC查看当前数据库版本,返回结果

    2024年02月12日
    浏览(28)
  • 宁盾统一身份中台助力某集团公司实现统一身份认证和管理(如泛微OA、微软AD)

    某集团公司是一家以钢铁为主业,涉足互联网金融、文化健康、智慧城市、现代物流等多领域的大型现代化企业集团。创业发展已有三十余年,拥有员工人数超万人,为了提升管理效率,同时实现国产化创新和数字化转型,公司采用了泛微OA和微软AD作为两套账号管理系统。泛

    2024年02月04日
    浏览(35)
  • 【漏洞复现】泛微OA E-Cology V9 browser.jsp SQL注入漏洞复现及利用(CNVD-2023-12632)

    泛微 E-Cology v9 Browser.jsp 存在SQL注入漏洞,攻击者可通过该漏洞获取服务器数据库敏感信息。 本篇文章仅用于漏洞复现与技术研究,请勿利用文章内的相关技术从事非法测试,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!! 泛微协同管理应用平台 e-

    2024年02月16日
    浏览(30)
  • 获取discord上自己创建的服务器的服务器ID、频道ID以及discord的登录token(用于第三方登录)

    在服务器图标上右键点击-》复制服务器ID  在频道上右键点击-》复制频道ID F12-手机模式-》application-》local storage-》填写过滤条件【token】 我开发的chatgpt网站: https://chat.xutongbao.top

    2024年02月22日
    浏览(31)
  • Android获取mac地址、OA地址和外网IP地址

    1、获取Mac地址:

    2024年02月13日
    浏览(32)
  • 微信小程序&会议OA-登录获取手机号流程&登录-小程序&导入微信小程序SDK(从微信小程序和会议OA登录获取手机号到登录小程序导入微信小程序SDK)

    目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties WxConfig WxAuthController 登录-小程序 login.js user.j

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包