单点登录之实战CAS5.1.x(六)——REST协议
单点登录之实战CAS5.1.x(六)——REST协议
ViperWhip 发表于3个月前
单点登录之实战CAS5.1.x(六)——REST协议
  • 发表于 3个月前
  • 阅读 68
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: REST协议

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);
        }

 

标签: cas sso 单点登录
共有 人打赏支持
粉丝 5
博文 7
码字总数 4925
×
ViperWhip
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: