文档章节

单点登录之实战CAS5.1.x(六)——REST协议

ViperWhip
 ViperWhip
发布于 2017/09/11 09:41
字数 401
阅读 111
收藏 0

b/s类型的项目我们可以使用前文的方法很容易就做了集成,如果是c/s类型的应用呢?还有些比较特殊b/s类型的项目,既希望能够集成sso,又希望能保留自己的登录画面和本地用户,这里就需要用到官方提供的REST协议。

这一段尝试过程很顺利,官方的文档虽然简单到不行不过没啥大毛病,笔者尝试用C#实现了一下一次通过,小伙伴们可以很轻松的参照C#代码码出其他语言的代码,因为只是做几次简单的http请求。

private void btnClick_Click(object sender, EventArgs e)
        {
            //获取TGT
            string tid = HtmlPost("https://sso.xxx.com/cas/v1/tickets", "username=zhangsan&password=1", "POST");
            //返回的格式是html,需要解析抽取TGT
            Regex regex = new Regex("(?<=tickets/).+?(?=\")", RegexOptions.Singleline);
            tid = regex.Match(tid).Value;

            //获取服务(客户端惟一url,可以捏造但必须惟一)凭据,有效期1.8秒
            string data = "service=" + HttpUtility.UrlEncode("https://www.xxx.com");
            string ticket = HtmlPost("https://sso.xxx.com/cas/v1/tickets/" + tid, data, "POST");

            //凭借客户端惟一url和它的凭据获取用户凭据
            string content = HtmlGet("https://sso.xxx.com/cas/p3/serviceValidate?service=https://www.xxx.com&ticket=" + ticket);
            //返回的content是xml格式的,需要自行解析

            //注销凭据
            string result = HtmlPost("https://sso.xxx.com/cas/v1/tickets/" + tid, "", "DELETE");
        }

        string HtmlPost(string url, string data, string method)
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = method;
            byte[] form = Encoding.Default.GetBytes(data);
            req.ContentLength = form.Length;
            req.GetRequestStream().Write(form, 0, form.Length);
            req.GetRequestStream().Close();
            HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(rep.GetResponseStream());
            string str = sr.ReadToEnd();
            sr.Close();
            rep.GetResponseStream().Close();
            return str;
        }

        string HtmlGet(string url)
        {
            WebClient wc = new WebClient();
            wc.Encoding = Encoding.UTF8;
            return wc.DownloadString(url);
        }

 

© 著作权归作者所有

共有 人打赏支持
ViperWhip
粉丝 6
博文 7
码字总数 4925
作品 0
嘉定
技术主管
如何在 CAS 单点登录环境下发送 Ajax 请求?

我已成功大家 CAS 单点登录服务器(简称 CAS),地址为:https://cas 有两个应用,已经它们集成在单点登录环境中,它们是: REST Server,地址为:http://rest-server REST Client,地址为:...

黄勇
2014/02/09
6.3K
8
单点登录整合方案

. 概念 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS...

很好亦平凡ms
2016/07/17
26
0
一年走向【Java架构师】之葵花宝典

大多数时候,不是我们不努力,而是不知从何下手,我深知一份好的学习资料是多么的重要,我们通常会把大量的时间都浪费在找资源上,本人搜集学习java架构师的经典学习路线如下可供参考!!! 一...

我一路狂奔
2017/05/20
395
1
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致dad
08/03
0
0
百度、阿里、腾讯、京东、大型互联网分布式架构必备技能

分布式架构 迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。 理论结合实战,透彻理解分布式架构及其解决方案。 面向人群 1、工作1-5年需要突破瓶颈; 2、传统...

Java高级架构
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里面试题

https://yq.aliyun.com/articles/6656 https://yq.aliyun.com/articles/7468

jason_kiss
33分钟前
3
0
阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统

背景 秒杀活动是绝大部分电商选择的低价促销,推广品牌的方式。不仅可以给平台带来用户量,还可以提高平台知名度。一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验...

别打我会飞
39分钟前
2
0
188. jsp提出公共的资源

平时我们会在一个地方 写一些重复的东西,为了便于管理我们需要将它提炼出来 1. 问题现象 2. 解决方式 (1) 提炼出该内容 <script type="text/javascript"> var net ={url: "${pageContext....

Lucky_Me
46分钟前
2
0
集合

集合 集合 集合介绍 前面的学习,我们知道数据多了,使用数组存放。而且数组中存放的都是基本类型的数据,并且数组是定长的。当在程序中创建的对象比较多的时候,需要对这些对象进行统一的管...

码农屌丝
53分钟前
2
0
jsp页面手写翻页小记

<s:if test="totalPage > 1"> <tr align="center"> <td colspan="4" align="center" style="height: 25px; text-align: center;">......

JackChenzp
53分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部