跨域认证,意味着用户在一个入口登录后可以无障碍的漫游到其它信任域。也就是所谓的单点登录(SSO)。对于大型的服务提供着,常用的方法有:使用安全断言标记语言(SAML)、基于公开密钥技术(PKI-Pubic Key Infrastructure)的Kerberos网络认证协议 或者使用Windows采用的认证方案LanManager认证(称为LM协议-对于NT 安装Service Pack4以后采用NTLM v2版本)。这些认证方式需要单独的认证服务器,对于普通的使用者来说,既难已
a_logon.aspx(C#伪代码)
//////////////////////////////
if( !Page.IsPostBack )
return;
if( VerifyPassword( sPwd ) )
{
string sSalt = CreateSalt(12);
Session.Add("User",sName);
Session.Add("Salt",sSalt);
string sHash = Hash( sName+sPwd + sSalt,"SHA1");
Session.Add("Passport",sHash);
string sR = "<iframe> id='aa'
src='/b_auth.php?name=%sName%&salt=%sSalt%&passport=%sHash%' width='0' height='0'> </iframe>";
Response.Write( sR);
}
/////////////////////////////////////////////
b_auth.php
----------------------------------------
<?php
//---------------------------
// cookie auth in multi-domain
// Author: Lazen lau
// Mail:
// History:
// 2007-05-17 10:00 release 1.0
// Copyright (C) 2007
//---------------------------
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $user = $_REQUEST['name']; $salt = $_REQUEST['salt']; $passport = $_REQUEST['passport'];
$hr = "auth failed";
if( !empty($passport))
{
//get usr pwd
$pwd = "888888";
//md5
$src = $user.$pwd.$salt;
$auth = strtoupper(sha1($src));
if( $auth == $passport )
{
setcookie("ticket",$passport);
$hr = "auth suc";