第三方终端如何接入CAS

话不多说,上代码:

package org.jasig.cas.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
  
public class CasTest {  
  
    public static void main(String... args) throws Exception {  
        String username = "10089";  
        String password = "123456";  
        validateFromCAS(username, password);  
    }  
  
    public static boolean validateFromCAS(String username, String password) throws Exception {  
    	//开发环境配置
        //String ticketUrl = "http://localhost:8006/cas/v1/tickets";  
        //String validateUrl = "http://localhost:8006/cas/serviceValidate";  
        //第三方服务
        //String serviceURL = "http://localhost:8006/cas/CasClient";  
        String serviceURL = "http://www.baidu.com";
        
        try {  
        	
            //Step 1 首先生成TGT ticket ,返回201代表用户已经成功登录。
            System.out.println("1.首先生成TGT ticket,请求地址为:"+ticketUrl);
            HttpURLConnection hsu = (HttpURLConnection) openConn(ticketUrl);  
            String s = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8");  
            s += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");  
  
            System.out.println("2.请求报文为:"+s);  
            OutputStreamWriter out = new OutputStreamWriter(hsu.getOutputStream());  
            BufferedWriter bwr = new BufferedWriter(out);  
            bwr.write(s);  
            bwr.flush();  
            bwr.close();  
            out.close();  
  
            String tgt = hsu.getHeaderField("location");  
            System.out.println("3.响应码为201表示用户已经成功登陆:"+hsu.getResponseCode());  
            if (tgt != null && hsu.getResponseCode() == 201) {  
                System.out.println("4.未加工的TGT串为:"+tgt);  
  
                //System.out.println("Tgt is : " + tgt.substring(tgt.lastIndexOf("/") + 1));  
                tgt = tgt.substring(tgt.lastIndexOf("/") + 1);  
                System.out.println("5.TGT为:"+tgt);  
                bwr.close();  
                closeConn(hsu);  
  
                //Step 2 验证当前用户是否在线/合法性 ,返回200代表用户验证成功,根据TGT成生ST
                String encodedServiceURL = URLEncoder.encode("service", "utf-8") + "="  
                        + URLEncoder.encode(serviceURL, "utf-8");  
  
                String myURL = ticketUrl + "/" + tgt;  
                System.out.println("6.验证当前用户是否在线/合法性,请求地址为:"+myURL);
                System.out.println("7.请求报文为:" + encodedServiceURL);  
                
                hsu = (HttpURLConnection) openConn(myURL);  
                out = new OutputStreamWriter(hsu.getOutputStream());  
                bwr = new BufferedWriter(out);  
                bwr.write(encodedServiceURL);  
                bwr.flush();  
                bwr.close();  
                out.close();  
  
                System.out.println("8.返回码为200代表用户验证成功:" + hsu.getResponseCode());  
  
                BufferedReader isr = new BufferedReader(new InputStreamReader(hsu.getInputStream()));  
                String line;
                String st = "";
                //System.out.println(hsu.getResponseCode());  
                while ((line = isr.readLine()) != null) {  
                	st = line;  
                }  
                isr.close();  
                hsu.disconnect();  
                System.out.println("9.根据TGT生成的ST为:" + st);  
                
                //Step 3 返回ST的用户信息
                closeConn(hsu);  
                encodedServiceURL = "";
                encodedServiceURL = URLEncoder.encode("service", "UTF-8") + "=" + URLEncoder.encode(serviceURL, "UTF-8");  
                encodedServiceURL += "&" + URLEncoder.encode("ticket", "UTF-8") + "=" + URLEncoder.encode(st, "UTF-8"); 
                
                System.out.println("10.返回ST的用户信息,请求地址为:" + validateUrl);
                System.out.println("11.请求报文为:"+encodedServiceURL);  
                
                hsu = (HttpURLConnection) openConn(validateUrl);  
                
                out = new OutputStreamWriter(hsu.getOutputStream());  
                bwr = new BufferedWriter(out);  
                bwr.write(encodedServiceURL);  
                bwr.flush();  
                bwr.close();  
                out.close();  
                
                System.out.println("12.返回码为:" + hsu.getResponseCode());  
                
                isr = new BufferedReader(new InputStreamReader(hsu.getInputStream()));  

                //System.out.println(hsu.getResponseCode()); 
                System.out.println("13.用户信息报文为:");
                while ((line = isr.readLine()) != null) {
                	if(line!=null && !line.equals("")&&!line.trim().equals("")){
                		System.out.println(line); 
                	}
                }  
                isr.close();  
                hsu.disconnect();  
                
                
                return true;  
  
            } else {  
                return false;  
            }  
  
        } catch (MalformedURLException mue) {  
            mue.printStackTrace();  
            throw mue;  
  
        } catch (IOException ioe) {  
            ioe.printStackTrace();  
            throw ioe;  
        }  
  
    }  
  
    static URLConnection openConn(String urlk) throws MalformedURLException, IOException {  
  
        URL url = new URL(urlk);  
        HttpURLConnection hsu = (HttpURLConnection) url.openConnection();  
        hsu.setDoInput(true);  
        hsu.setDoOutput(true);  
        hsu.setRequestMethod("POST");  
        return hsu;  
  
    }  
  
    static void closeConn(HttpURLConnection c) {  
        c.disconnect();  
    }  
  
}  

当然这种方式最好第三方也是个casclient, 拿到ST之后可以做更多的事,但如果不是也可以,能校验账号密码登录了也行。

接入cas的话还有一种跳过cas思想的做法,那就是直接弄个restful接口,跳过票据这一块,但是这样又会违背cas的设计思想,孰轻孰重需要根据万恶的需求了。

### 回答1: 第三方系统对接CAS(Central Authentication Service)RESTful接口是指将第三方系统与CAS系统进行集成,使得第三方系统可以通过调用CAS的RESTful接口来实现用户认证和授权功能。 第三方系统与CAS系统对接的过程通常包括以下几个步骤: 1. 配置CAS服务器:在CAS服务器上进行相关配置,包括定义用户认证的方式(例如用户名密码、单点登录等)和认证成功后的返回数据格式等。 2. 接入CAS客户端:在第三方系统中集成CAS客户端,通过CAS客户端与CAS服务器建立连接。 3. 请求认证:当用户访问第三方系统时,第三方系统将用户请求重定向到CAS服务器的认证接口,进行用户认证。 4. 获取票据:用户在CAS服务器上成功认证后,CAS服务器会返回一个票据(ticket),第三方系统将该票据作为参数发送给CAS服务器的票据校验接口。 5. 校验票据:CAS服务器收到票据后,通过票据校验接口验证票据的有效性,并返回相应的认证结果给第三方系统。 6. 授权访问:验证成功后,第三方系统可以根据CAS服务器返回的用户信息来进行授权访问,如获取用户的角色、权限等。 7. 注销认证:当用户退出第三方系统时,第三方系统需要调用CAS的注销接口来注销用户的认证信息。 通过以上步骤,第三方系统可以通过CAS的RESTful接口进行用户认证和授权,实现了统一的登录认证和单点登录功能,提升了系统的安全性和用户体验。 ### 回答2: 第三方系统对接CAS RESTful接口,首先需要了解CAS(Central Authentication Service)是什么。CAS是一种单点登录(Single Sign-On)协议,提供了认证和授权的功能,可以实现不同系统之间的用户身份单点登录和安全交互。 对接CAS RESTful接口的过程一般包括以下几个步骤: 1.了解CAS RESTful接口文档:首先需要仔细阅读CAS RESTful接口的文档,了解接口的功能、参数及返回值。 2.注册第三方系统:在CAS系统中注册第三方系统的信息,包括系统名称、系统URL等。注册后会获得一个唯一的系统凭证。 3.获取CAS登录凭证:第三方系统需要通过CAS RESTful接口向CAS系统发送登录请求,包括用户名和密码等信息。CAS系统会验证用户身份,并返回给第三方系统一个登录凭证,通常是一个token或者ticket。 4.验证CAS登录凭证:第三方系统拿到登录凭证后,需要将凭证作为参数发送给CAS RESTful接口进行验证。如果凭证有效,CAS系统会返回相应的用户信息给第三方系统。 5.其他接口调用:一旦用户身份验证成功,第三方系统可以调用CAS RESTful提供的其他接口,进行用户授权、访问受限资源等操作。 6.处理CAS回调:CAS系统会通过回调机制通知第三方系统用户的登录状态变化等重要事件。第三方系统需要相应地处理这些回调,确保与CAS系统的同步更新。 总的来说,对接CAS RESTful接口需要进行注册、登录凭证获取和验证、其他接口调用等步骤。通过正确地使用CAS RESTful接口,第三方系统可以实现与CAS系统的安全交互和用户身份认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgv3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值