文档章节

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

ViperWhip
 ViperWhip
发布于 2017/09/11 09:41
字数 401
阅读 103
收藏 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
嘉定
技术主管
Spring Security 从入门到进阶系列教程

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

小致dad
08/03
0
0
Spring Boot 之 RESRful API 权限控制

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “简单,踏实~ 读书写字放屁” 一、为何用RESTful API 1.1 RESTful是什么? RESTful(Representational State ...

泥沙砖瓦浆木匠
2016/04/20
342
4
移动开发之微信小程序——资料集合

本文转载自:知乎 有需要下载的客官可可以点击知乎去下载相关资料 一:官方地址集合: 1:官方工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461 2:...

DJY1992
2016/12/21
0
0
单点登录整合方案

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

很好亦平凡ms
2016/07/17
26
0
Shiro权限框架简介

最近加入了gxpt项目组,被安排做权限模块,所以也有幸第一次接触到了Shiro框架。让我们来一起领略Shiro的风采吧。 什么是Apache Shiro? Apache Shiro(发音为“shee-roh”,日语“堡垒(Cas...

白志华
2015/10/18
151
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
17分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
19分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
35分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部