EAS Cloud8.8 集成第三方oauth2.0的统一认证

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

EAS Cloud8.8 集成第三方oauth2.0的统一认证

# CAS适用版本:CAS 3.5.3 # CAS登录流程: ![image.webp](/download/01006c2446c4450944a4b8049608fbe559ba.webp) # OAuthen2.0登录流程: ![image.webp](/download/0100f9b007d761064509a07c602c25a88d53.webp) **根据上述CAS和OAuthen2.0原理图,改造的关键点如下** 1、登录拦截跳转到OAuthen2.0认证中心 2、认证通过后跳回业务系统,需要携带认证码 3、获取认证码,并后台请求认证中心进行验证并获取到用户信息 4、拿到用户信息后解析并构造Assertion对象给CAS # 二开修改要点 ## 一、登录跳转拦截,未登录情况需跳转到oauth2.0的统一认证中心登录界面。 1、KDPortalAuthenticationFilter 中覆写方法:retrieveTicketFromRequest,覆写内容如下: ``` protected String retrieveTicketFromRequest(HttpServletRequest request){ String code = request.getParameter("code"); if(!StringUtil.isEmpty(code)){ return code; } return super.retrieveTicketFromRequest(request); } ``` 2、KDPortalAuthenticationFilter doFilter中 最后跳转登录界面前,修改构建跳转认证中心登录地址,修改如下: ``` 将这行代码: final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getProtocol().getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway, this.method); 修改如下 final String urlToRedirectTo = "http://cas.example.org:8080/cas/oauth2.0/authorize?"+ "response_type=code&client_id=100001&redirect_uri="+URLEncoder.encode(request.getRequestURL().toString(),"utf-8"); ``` 拼接的url要符合标准,例如如下: ``` https://authorization-server.com/auth ?response_type=code &client_id=29352915982374239857 &redirect_uri=https://example-app.com/callback &scope=create+delete &state=xcoiv98y2kd22vusuye3kch ``` response_type=code:这将通知认证中心,客户端正在启动授权代码流程。 client_id:客户端的标识符,在开发人员首次注册应用程序时获得。 redirect_uri:告诉认证中心在用户批准请求后将用户发送回何处。 scope:一个或多个空格分隔的字符串,指示客户端请求的权限。(可以不传) state:客户端生成一个随机字符串并将其包含在请求中。然后应该检查在用户授权客户端之后是否返回相同的值。用于防止CSRF攻击。 ## 二、通过code进行系统登录 统一认证中心登录成功后会发送302跳转请求到eas,并携带code到eas,eas需要校验code的合法性,以及从code换取用户的登录信息然后进行登录,我们需要将这一步要转到我们自己的类中来 1、KDPortalTicketValidationFilter中的retrieveTicketFromRequest方法最后面一行 (return super.retrieveTicketFromRequest(request);)前面加上以下内容 ``` String code = request.getParameter("code"); if(!StringUtil.isEmpty(code)){ return code; } ``` 2、需要修改KDPortalTicketValidationFilter类的getTicketValidator方法在第一行添加 ``` String code = request.getParameter("code"); if(!StringUtil.isEmpty(code)){ return new OAuth20CodeValidata(); } ``` OAuthen20CodeValidata参考如下: ``` public class OAuth20CodeValidata implements TicketValidator{ @Override public Assertion validate(String code, String url) throws TicketValidationException { String valiDataUrl = "http://cas.example.org:8080/cas/oauth2.0/accessToken?grant_type=authorization_code&client_id=100001&client_secret=100001" + "&code="+code+"&redirect_uri=http://127.0.0.1:56898/portal/"; //通过url获取用户信息 //String user = HttpClient.getUserInfo(valiDataUrl); String user = "user"; //可以放账套信息和语言信息等登录需要的信息,如果不放需要在CASLoginConfig.properties配置 Map<String,Object> map = new HashMap<String,Object>(); map.put("solutionName","eas"); map.put("dataCenter","SP1DEMO"); map.put("locale","L2"); map.put("dbType","0"); map.put("userAuthPattern","eas"); map.put("isPureWeb","true"); map.put("loginFlow","true"); map.put("sso.user.mapping","true"); Assertion assertion = new AssertionImpl(new AttributePrincipalImpl(user, map)); return assertion; } } ``` ## 三、登录多样性 以上方案完全是从代码层面去兼容oauth2.0认证登录,以兼容保留的产品自带的登录的方式,单点登录的原有配置文件请不要修改。 如果不需要走oauth2.0认证登录或者auth2.0认证无法使用时,可直接访问产品自有的标准登录界面进行登录,访问链接如下: http://127.0.0.1:8080/eassso/login?service=http://127.0.0.1:8080/portal/main.jsp 这个链接的service参数表示的是最终登录完成后跳转的地址,可按实际情况修改。

EAS Cloud8.8 集成第三方oauth2.0的统一认证

# CAS适用版本:CAS 3.5.3# CAS登录流程:![image.webp](/download/01006c2446c4450944a4b8049608fbe559ba.webp)# OAuthen2.0登录流...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息