电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

EAS登录集成Oauth2.0的开发指导文档

来源:金蝶云社区作者:金蝶2024-09-2215

EAS登录集成Oauth2.0的开发指导文档






  1. 背景

    EAS默认采用CAS作为EAS本身的统一认证中心,由于CAS版本比较老旧,因此标准不支持Oauth2.0协议,由于OAuth2.0的普遍使用性,本文旨在简化EAS对接Oauth2.0过程中的流程,适用于EAS全版本

  2. EAS目前登录流程

     登录拦截器配置

     

  3. 二次扩展

    二开扩展遵循少改代码,不影响标准产品,不被打补丁影响功能,改动多意味着容易出错,后续打补丁很大概率功能会被冲掉,尤其是修改了很多配置文件,因此为了不受补丁影响,最好是将所有功能全部集成到私包代码里面,通过反编译工具(最好是使用luyten反编译工具来反编译,EAS8.8版本以下可以直接使用附录源码)修改

    com.kingdee.bos.sso.client.filter.authentication.KDPortalAuthenticationFilter和

    com.kingdee.bos.sso.client.filter.validation.KDPortalTicketValidationFilter两个类改动最小,无需修改web.xml来添加自定义拦截器

    第一步:拦截跳转,未登录情况需跳转到oauth2.0的统一认证中心登录界面

    代码修改:需要在KDPortalAuthenticationFilter doFilter方法调用super.doFilter之前嵌入逻辑

    1.        String url= "http://cas.example.org:8080/cas/oauth2.0/authorize?"+

    2.         "response_type=code&client_id=100001&redirect_uri="

    3.         +URLEncoder.encode(request.getRequestURL().toString(),"utf-8");

    4.         //设置跳转地址

    5.         this.setCasServerLoginUrl(url);

    6.         //设置code为登录票据标识,不拦截

    7.         String code = request.getParameter("code");

    8.         String ticket = request.getParameter("ticket");

    9.         if(!StringUtil.isEmpty(code)){

    10.              this.setArtifactParameterName("code");

    11.         }else if(!StringUtil.isEmpty(ticket)){

    12.              this.setArtifactParameterName("ticket");

    13.         }

     url参数为跳转认证中心登录地址(三方提供),第7,8行代码是为了处理登录票据标识,ticket是cas的默认标识,code是oauth2.0的标识,基本上无需改动。如果需要保留eas本身登录,不能屏蔽对ticket的处理,如果无需保留eas的登录,则可以不对ticket进行处理,只需要处理code即可

    第二步:通过code进行系统登录

    统一认证中心登录成功后会发送302跳转请求到eas,并携带code到eas,eas需要校验code的合法性,以及从code换取用户的登录信息然后进行登录,我们需要将这一步要转到我们自己的类中来

    代码修改:需要修改KDPortalTicketValidationFilter类的getTicketValidator方法在第一行添加

        if("code".equals(type))

                return new OAuth20CodeValidata();

    并修改preFilter方法,在前面添加

    String code = servletRequest.getParameter("code");

    String type = "ticket";

    if(!StringUtil.isEmpty(code)){

    type ="code";

    这样就将oauth2.0的回调校验转到OAuth20CodeValidata类

    第三步:OAuth20CodeValidata类校验

    OAuth20CodeValidata需要实现org.jasig.cas.client.validation.TicketValidator接口,覆写方法

    public Assertion validate(String code, String url);

    我们只需要code参数换取合法用户信息即可,伪代码如下:

    1. String valiDataUrl = "http://cas.example.org:8080/cas/oauth2.0/accessToken?grant_type=authorization_code&client_id=100001&client_secret=100001" +

    2. "&code="+code+"&redirect_uri=http://127.0.0.1:56898/portal/";

    3. //通过url获取用户信息

    4. //String user = HttpClient.getUserInfo(valiDataUrl);

    5. String user = "user

EAS登录集成Oauth2.0的开发指导文档

背景EAS默认采用CAS作为EAS本身的统一认证中心,由于CAS版本比较老旧,因此标准不支持Oauth2.0协议,由于OAuth2.0的普遍使用性,本文旨在简...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信