ワンポイントログイン(SSO)(オリジナル)
7091 ワード
Single Sign On(Single Sign On)は、SSOと略称され、現在流行している企業ビジネス統合のソリューションの一つです.SSOの定義は,複数のアプリケーションシステムにおいて,ユーザが一度ログインするだけで相互信頼のあるすべてのアプリケーションシステムにアクセスできることである.
次のssoは、同じトップドメイン名の下で、複数のサブドメインです.
1、ssoは、各サイトを認証するためのトークンを必要とし、一般的なトークンはGuidを使用する.
2、passportのサイトを建てて、ログインの検証をして、ログインに成功した後、トークンを生成して、クッキーのTokenに書き込んで、そしてユーザー情報とTokenをキャッシュに保存して、Systemを使うことができる.Web.HttpRuntime.Cacheは、memcacheを使用することもできます.通常はmemcacheを使用します.分散ストレージができるからです.
クッキーの書き込み:
キャッシュ:
3、第2のステップは直接pssportにログインし、他のサイトにログインしている場合は、先にログインしているかどうかを判断し、その場合はクッキーからtokenが存在するかどうかを判断し、存在している場合はpassportに行って正しいtokenを検証し、これはどのように検証しますか?サービスリモートで判断することができ、一般的にwcfを使用し、ログインに成功したことを説明することに成功すれば、ユーザー情報をsessionに保存することができ、sessionで比較的安全であり、cookisは一般的に隠密ではない情報を保存するために使用される.検証が正しくない場合、またはクッキーにtokenが存在しない場合は、passportにジャンプしてログインし、元のサイトにジャンプする必要があります.
実装コード:
はい、単一のログインのプロセスはそうですが、これは単一のログインを実現し、セッションは共有されていません.現在、各サイトのセッションは同じセッションではありません.
次の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);
}
はい、単一のログインのプロセスはそうですが、これは単一のログインを実現し、セッションは共有されていません.現在、各サイトのセッションは同じセッションではありません.