单点登录之实战CAS5.1.x(六)——REST协议
生活随笔
收集整理的這篇文章主要介紹了
单点登录之实战CAS5.1.x(六)——REST协议
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
b/s類型的項目我們可以使用前文的方法很容易就做了集成,如果是c/s類型的應用呢?還有些比較特殊b/s類型的項目,既希望能夠集成sso,又希望能保留自己的登錄畫面和本地用戶,這里就需要用到官方提供的REST協議。
這一段嘗試過程很順利,官方的文檔雖然簡單到不行不過沒啥大毛病,筆者嘗試用C#實現了一下一次通過,小伙伴們可以很輕松的參照C#代碼碼出其他語言的代碼,因為只是做幾次簡單的http請求。
private void btnClick_Click(object sender, EventArgs e){//獲取TGTstring tid = HtmlPost("https://sso.xxx.com/cas/v1/tickets", "username=zhangsan&password=1", "POST");//返回的格式是html,需要解析抽取TGTRegex 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);}?
轉載于:https://my.oschina.net/viperwhip/blog/1534908
總結
以上是生活随笔為你收集整理的单点登录之实战CAS5.1.x(六)——REST协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:“男怕磨,女怕泡;鸡怕撵,狗怕舔”
- 下一篇: webpack entry和output