文档章节

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

ViperWhip
 ViperWhip
发布于 2017/09/11 09:41
字数 401
阅读 133
收藏 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
博文 9
码字总数 6938
作品 0
嘉定
技术主管
私信 提问
企业级开源单点登录解决方案 - CAS

CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。 CAS ...

匿名
11/22
0
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

没有更多内容

加载失败,请刷新页面

加载更多

phper必知必会(二)

  1.说说你对进程,线程以及协程的理解      进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程是程序基本执行的实体。进程与进程之间是独立的,拥有完全独立...

SEOwhywhy
12分钟前
0
0
Ubuntu16.04下安装docker

[TOC] 本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。 1. 开始安装 1.1 由于...

豫华商
今天
10
0
使用XShell工具密钥认证登录Linux系统

如果你是一名Linux运维,那么Linux服务器的系统安全问题,可能是你要考虑的,而系统登录方式有两种,密码和密钥。哪一种更加安全呢? 无疑是后者! 这里我为大家分享用Xshell利器使用密钥的方...

dragon_tech
今天
8
0
day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下?蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍,并有着更低的脂肪和含糖量”,听起来诱人又美味的并不是羊奶或豆奶,而是你可能打死都想不到...

飞鱼说编程
今天
13
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

场景重现 npm install --verbose 安装依赖的时,出现如下警告 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):npm WARN notsup SKIPPING OPTIONA......

taadis
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部