文档章节

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

ViperWhip
 ViperWhip
发布于 2017/09/11 09:41
字数 401
阅读 100
收藏 0
点赞 0
评论 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
粉丝 5
博文 7
码字总数 4925
作品 0
嘉定
技术主管
原来可以这样玩 SSO

1 什么是 SSO? 今天我问老婆:你知道 SSO 吗?她给了两个字:求救! 哎!她说的应该是 SOS,她不搞 IT,不知者无罪。但对于我们而言,如果还不知道 SSO 是什么,那真应该赶紧去百度一下了。...

黄勇 ⋅ 2014/02/11 ⋅ 16

Spring Boot 之 RESRful API 权限控制

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

泥沙砖瓦浆木匠 ⋅ 2016/04/20 ⋅ 4

移动开发之微信小程序——资料集合

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

DJY1992 ⋅ 2016/12/21 ⋅ 0

单点登录整合方案

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

很好亦平凡ms ⋅ 2016/07/17 ⋅ 0

Shiro权限框架简介

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

白志华 ⋅ 2015/10/18 ⋅ 0

SOAP webserivce 和 RESTful webservice 对比及区别

摘要: 简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMT...

huojiao2006 ⋅ 2017/02/27 ⋅ 0

集群应用与实战

集群 什么是集群: — 一组通过高速网络互联的计算组,并以单一系统的模式加以管理 — 将很多服务器集中起来,提供同一中服务,在客户端看来就像是只有一个服务器 — 可以在付出较低成本的情...

Xuenqlve ⋅ 01/15 ⋅ 0

STP--生成树协议

生成树协议(Spanning Tree Protocol),简称STP。 为什么要用生成树协议? 在下图的交换网络中,若交换机间的链路发生故障,会导致主机间无法进行通信,我们称之为“单点故障”。 如何解决“...

段超超 ⋅ 2017/10/17 ⋅ 0

如何在 CAS 单点登录环境下发送 Ajax 请求?

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

黄勇 ⋅ 2014/02/09 ⋅ 8

一年走向【Java架构师】之葵花宝典

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

我一路狂奔 ⋅ 2017/05/20 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Gitee 生成并部署SSH key

1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair...# 三次回车即可生成 ssh key 查看你的 ...

晨猫 ⋅ 48分钟前 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部