1. 程式人生 > >web api 單點登入(SSO) 許可權驗證

web api 單點登入(SSO) 許可權驗證

分站程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;
using System.Net.Http;

namespace MvcApplication2.Controllers
{
public class HomeController : Controller
{
public class infoMassege
{
public string webName { get; set; }
public string[] message { get; set; }
}
public ActionResult Index()
{
//令牌驗證結果
if (Request.QueryString["Token"] != null)
{
//持有令牌
string tokenValue = Request.QueryString["Token"];
HttpCookie tokenCookie = new HttpCookie("Token");
tokenCookie.Values.Add("Value", tokenValue);
tokenCookie.Expires = DateTime.Now.Add(new TimeSpan(24, 0, 0));
tokenCookie.Path = "/";
Response.AppendCookie(tokenCookie);

if (Session["Info"]==null)
{
getInfo(tokenValue);
}
}
else if (Request.Cookies["Token"]!= null)
{
string tokenValue = Convert.ToString(Request.Cookies["Token"].Value);
if (Session["Info"] == null)
{
getInfo(tokenValue);
}
}
else
{
//未持有令牌
Response.Redirect("http://localhost:4213/?BackURL=" + Server.UrlEncode(Request.Url.AbsoluteUri));
}
return View();
}

public void getInfo(string tokenValue)
{ //客戶端呼叫Web api
System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
client.BaseAddress = new Uri("http://localhost:4213/");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("api/Login/?token=" + tokenValue).Result;
if (response.IsSuccessStatusCode)
{
infoMassege info = response.Content.ReadAsAsync<infoMassege>().Result;
string[] a = info.message;
System.Web.HttpContext.Current.Session["Info"] = a;
System.Web.HttpContext.Current.Session.Timeout = 1;
}
else
{
Response.Redirect("http://localhost:4213/?BackURL=" + Server.UrlEncode(Request.Url.AbsoluteUri));
return;
}
}
}
}

主站程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using SSO.Passport.Class;
using System.Data;

namespace MvcApplication1.Controllers
{
public class LoginController : ApiController
{
public class infoMassege
{
public string webName { get; set; }
public string[] message { get; set; }
//public string webName = "a";
//public string[] message = { "user", "admin", "tuorist" };
};
HttpResponseMessage response;
LoginController()
{
response = new HttpResponseMessage();
}
[HttpPost]
public HttpResponseMessage Post()
{

//摸擬使用者登入驗證(帳號、密碼於web.config中)
//真實環境此處應通過資料庫進行驗證
//if (this.txtAccount.Text == System.Configuration.ConfigurationManager.AppSettings["acc"] && this.txtPassport.Text == System.Configuration.ConfigurationManager.AppSettings["pas"])
//{
//產生令牌
string tokenValue = this.getGuidString();
HttpContext.Current.Cache.Insert(tokenValue+"a", tokenValue, null, DateTime.Now.AddMinutes(3), TimeSpan.Zero);

//產生主站憑證
CreateInfo(tokenValue);
response = Request.CreateResponse(HttpStatusCode.OK, @"{""tokenValue"":""" + [email protected]"""}");
return response;
}
//產生主站憑證
private void CreateInfo(string tokenValue)
{
infoMassege info = new infoMassege();
info.message = new string[] { "user", "admin", "tuorist" };
info.webName = "a";
if (HttpContext.Current.Cache[tokenValue] == null)
{
HttpContext.Current.Cache.Insert(tokenValue, info, null, DateTime.Now.AddMinutes(1),TimeSpan.Zero);
}
//System.Web.Caching.Cache c = HttpContext.Current.Cache;
//CacheManager.TokenInsert(tokenValue, info, DateTime.Now.AddMinutes(100));
}

[HttpGet]
public HttpResponseMessage getCache(string token)
{
if (HttpContext.Current.Cache[token + "a"] != null)
{
infoMassege proof = new infoMassege();
proof = (infoMassege)HttpContext.Current.Cache[token];
if (proof != null)
{
response = Request.CreateResponse(HttpStatusCode.OK, proof);
}
else
{
CreateInfo(token);
getCache(token);
}
}
else
{
response = Request.CreateResponse(HttpStatusCode.Forbidden);
}
return response;
}


/// <summary>
/// 產生絕對唯一字串,用於令牌
/// </summary>
/// <returns></returns>
private string getGuidString()
{
return Guid.NewGuid().ToString().ToUpper();
}
}
}

相關推薦

web api 登入SSO 許可權驗證

分站程式碼: using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;usin

最簡單的web登入SSO

Fay Sso (單點登入如此的簡單,本示例支援IE9+,IE8也可以實現) 執行示例程式碼需要安裝node.js環境 Test 讓我們直接先來測試這個例子,然後看下我實現的想法,你會發現它是如此的簡單!

登入SSO的自己看資料的一點理解

主要是學習了這篇微博:https://www.cnblogs.com/EzrealLiu/p/5559255.html 這篇文章在方案3和方案4中講解的個人有點不理解,加了一點自己的理解 原文 1.U第一次訪問W,W驗證失敗,跳轉至SSO要求U進行登入驗證; 登入並使各不同Do

CAS實現登入SSO

什麼是單點登入 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 我們目前的系統存在諸多子系統,而這些子系統是分別部署在不

CAS實現登入sso搭建流程 伺服器端搭建

一、簡介 1、cas是有耶魯大學研發的單點登入伺服器 2、所用環境 ·        Linux系統 ·        To

漫談登入SSO

1. 摘要( 注意:請仔細看下摘要,留心此文是否是您的菜,若浪費寶貴時間,深感歉意!!!)SSO這一概念由來已久,網路上對應不同場景的成熟SSO解決方案比比皆是,從簡單到複雜,各式各樣應有盡有!開源的有OpenSSO、CAS ,微軟的AD SSO,及基於kerberos 的S

如何實現與Teamcenter PLM登入SSO

前言 結合青銅器RDM與西門子Teamcenter單點登入,詳細講解如何實現與C/S客戶端模式的Teamcenter單點登入。 需求 青銅器RDM作為統一登入平臺,使用者登入青銅器RDM以後,無需再次輸入賬號密碼,點選某一選單即可進入TeamCenter系統 約束條件 1

登入SSO實現方式附原始碼

原文地址:http://www.cnblogs.com/youring2/p/sso-practice.html SSO的基本概念 SSO英文全稱Single Sign On(單點登入)。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統

CAS登入SSO介紹及部署

介紹 CAS CAS 是Yale(耶魯)大學的一個開源的企業級單點登入系統,它的特點: Java (Spring Webflow/Spring Boot) 服務元件 可插拔身份驗證支援(LDAP,Database,X.509,MFA) 支援多種協議

深入淺出登入SSO

1. 摘要 ( 注意:請仔細看下摘要,留心此文是否是您的菜,若浪費寶貴時間,深感歉意!!!) SSO這一概念由來已久,也是相當普遍的一種身份驗證設計,網路上對應不同場景的SSO解決方案比比皆是,從簡單到複雜、安全等級的步步攀升,可謂百花爭豔!如:開源的有OpenSSO

手把手教你如何玩轉登入SSO

情景引入 小白:起床起床起床。。。。。。快起床 我:怎麼怎麼了。。。又怎麼了? 小白:最近,我發現了一個奇怪的事情~! 我:說收,什麼奇怪的事情了呢? 小白:我前些天,我逛了逛新浪部落格,然後看了看裡面的內容,感覺還挺不錯的。可是,關鍵讓我覺得不可思議

登入sso需求文件

前言 編寫此需求文件,一方面是對sso系統實現的明確,另一方面也作為進一步詳細設計軟體的基礎。 本文件包含以下幾個部分: 系統概要 Sso設計流程 系統概要        隨著時代的發展,公司的Server慢慢開始變多。如果每個server都要進行註冊登入,退出的

誰都能看懂的登入SSO實現方式附原始碼

SSO的基本概念 SSO英文全稱Single Sign On(單點登入)。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登入對映到其他應用中用於同一個使用者的登入的機制。它是目前比較流行的企業業務整合的解決方案之一

關於 WebSphere Portal, Domino 擴充套件產品以及Domino 登入SSO的疑難解答

索引: I. 每個產品的正確測試方法 II. 關於這三個產品的常規設定和配置 III. 對於 QuickPlace 伺服器的其他步驟 IV. 對於 Sametime 伺服器的其他步驟 V. 當 Portal 與 QuickPlace,Sametime 或 Domino 使用不同目錄時需要的其他步驟 VI. 其

登入SSO原理

一、單系統登入機制 1、http無狀態協議   web應用採用browser/server架構,http作為通訊協議。http是無狀態協議,瀏覽器的每一次請求,伺服器會獨立處理,不與之前或之後的請求產生關聯,這個過程用下圖說明,三次請求/響應對之間沒有任何聯絡   

基於CAS實現登入SSO:CAS+LDAP實現登入認證

[一]、概述 CAS是N個系統的中心認證入口,而貫穿多個系統的使用者資訊是共用的,應該被單獨維護,而這些資訊可能屬於不用的系統,不用的組織,不用的國家,從而形成了樹形結構,而使用關係型資料庫維護樹形結構資訊是它的弱點,這就是本文CAS和LDAP整合的初衷。 本來主要

SSO 基於Cookie+fliter實現登入SSO:工作原理

SSO的概念:        單點登入SSO(Single Sign-On)是身份管理中的一部分。SSO的一種較為通俗的定義是:SSO是指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入

登入-基於Redis+MySQL實現登入SSO

1. 為什麼要用單獨登入? 主要便於公司內部多系統統一認證授權管理,一次登入可訪問多個跨域系統,也同時更加方便統一管理使用者登入

用 Authing 10分鐘實現登入SSO

單點登入(Single Sign On),簡稱為SSO,是目前比較流行的企業業務整合的解決方案之一。 SSO的定義是在多個應用系統

登入SSO解決方案介紹

一、單點登入的介紹 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 例如:百度旗下有很多的產品,比如百度貼吧、百度知道、百度文庫等,只要登入百度賬號,在任何一個地方都是