ワンポイントログイン(SSO)(オリジナル)


Single Sign On(Single Sign On)は、SSOと略称され、現在流行している企業ビジネス統合のソリューションの一つです.SSOの定義は,複数のアプリケーションシステムにおいて,ユーザが一度ログインするだけで相互信頼のあるすべてのアプリケーションシステムにアクセスできることである.
次のssoは、同じトップドメイン名の下で、複数のサブドメインです.
1、ssoは、各サイトを認証するためのトークンを必要とし、一般的なトークンはGuidを使用する.
private string GetTokenValue()
{
return System.Guid.NewGuid().ToString();
}

  
private string GetTokenValue()
        {
            return System.Guid.NewGuid().ToString();
        }

  
2、passportのサイトを建てて、ログインの検証をして、ログインに成功した後、トークンを生成して、クッキーのTokenに書き込んで、そしてユーザー情報とTokenをキャッシュに保存して、Systemを使うことができる.Web.HttpRuntime.Cacheは、memcacheを使用することもできます.通常はmemcacheを使用します.分散ストレージができるからです.
クッキーの書き込み:
string _token = GetTokenValue();
HttpCookie cookie = new HttpCookie("token");
cookie.Value = _token;
cookie.Expires = DateTime.Now.AddDays(1);
cookie.Domain = ".cc.com";
Response.Cookies.Add(cookie);

  
キャッシュ:
/// <summary>
///            
/// </summary>
/// <param name="user"></param>
private void InsertCache(User user)
{
System.Web.Caching.Cache cache = System.Web.HttpRuntime.Cache;
List<User> list = new List<Entity.User>();
if (cache["User"] == null)
{ 
list.Add(user); 
}
else
{
list = cache["User"] as List<User>;
list.Add(user);

}
cache.Insert("User", list, null, DateTime.MaxValue, TimeSpan.FromMinutes(double.Parse(System.Configuration.ConfigurationManager.AppSettings["Timeout"]))); 

}

  
 
3、第2のステップは直接pssportにログインし、他のサイトにログインしている場合は、先にログインしているかどうかを判断し、その場合はクッキーからtokenが存在するかどうかを判断し、存在している場合はpassportに行って正しいtokenを検証し、これはどのように検証しますか?サービスリモートで判断することができ、一般的にwcfを使用し、ログインに成功したことを説明することに成功すれば、ユーザー情報をsessionに保存することができ、sessionで比較的安全であり、cookisは一般的に隠密ではない情報を保存するために使用される.検証が正しくない場合、またはクッキーにtokenが存在しない場合は、passportにジャンプしてログインし、元のサイトにジャンプする必要があります.
実装コード:
protected override void OnLoad(EventArgs e)
        {
            if (Request.Cookies["Token"] == null)
            {
                Response.Redirect(this.Sites.PassPortSite + "/login.aspx?gotourl=" + this.Sites.AdminSite + "/default.aspx");
            }
            else
            {
                if (Session["member"] == null)
                {
                    HttpCookie cookie = Request.Cookies["token"];

                    WebClient MyWebClient = new WebClient(); MyWebClient.Credentials = CredentialCache.DefaultCredentials;//         Internet                。
                    string weburl = this.Sites.PassPortSite+"/gettoken.aspx?token=" + cookie.Value.ToString(); Byte[] pageData = MyWebClient.DownloadData(weburl);//          //string pageHtml = Encoding.Default.GetString(pageData); //            GB2312,     

// , ,
string pageHtml = Encoding.UTF8.GetString(pageData); // UTF-8, if (!string.IsNullOrEmpty(pageHtml.Trim())) { int id = Convert.ToInt32(pageHtml); IUserBiz userBiz = new UserBiz(); Session["member"] = userBiz.GetUser(id); } else { Session["member"] = null; Response.Redirect(this.Sites.PassPortSite + "/login.aspx?gotourl="+this.Sites.AdminSite+"/default.aspx"); } } } base.OnLoad(e); }

 
 
はい、単一のログインのプロセスはそうですが、これは単一のログインを実現し、セッションは共有されていません.現在、各サイトのセッションは同じセッションではありません.