注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网络新势力

关注互联网,研究互联网,学习互联网,参与互联网——做一个互联网人

 
 
 

日志

 
 
关于我

姓名:何直群 网名:腾龙 职业:网站策划、BS程序开发(ASP\PHP) 介绍: 网站程序员(ASP & PHP)、网站构架与策划人,长期关注互联网的发展。曾就职于通信世界网(非记者)、盛大网络北京分公司、互联网观察中心、宝利亚洲。现就职与265负责网站联盟产品相关工作。曾创办过新农在线(已停)、我摘(www.wozhai.com)等网站…… ---------- 腾龙博客好友请加: QQ群:3347162 MSN群:group137861@xiaoi.com -----------

网易考拉推荐

Passport 的跨域认证解决方法探索  

2006-03-24 15:59:49|  分类: 网络技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    注意:以下为个人构思,尚未验证和分析其实际可操作性。
    今天忽然想到了“Passport”。
    普通的网站登陆,都是用户提交登陆的信息,然后由网站的程序通过数据库去验证,如果确认了,就保存一个COOKIES或者SESSION,然后用户和站点之间就可以通过SESSION来确认用户的身份了。
    而PASSPORT,就是希望用户的多个系统,使用同一套用户验证信息,就比如说,用户如果登陆了BLOG系统,然后要去访问BBS系统的时候,就不用再登陆了,直接访问就可以。
Passport最难的就是跨域认证的问题。因为如果两个系统都在同一个域名系统下(比如www.wozhai.com)那么,几个系统是可以通过访问同一个SESSION来直接知道,这个访问者的身份。
    如果是两个域名(比如www.wozhai.com 和 search.wozhia.com),两个域名之间是不能访问一个SESSION的(即使同一台服务器也不行)。因为安全的考虑,而且COOKIES也是不能互相访问的。
    看了很多资料,现在很多大的公司都使用很复杂的办法,实现了这个功能。但是作为广大的中小企业,普通爱好者,特别是我这样的程序开发的“半路出家”者。就感觉太高难了。那么是否有一个非常简单的方法实现这个功能呢?
    以下就是我的全套解决方案。非常简单。
    1、架设一个PASSPORT服务器(该服务器命名为A)。所有的用户验证都通过此服务器验证,其他服务器对用户信息的获取,用户的身份确认,都要通过这个服务器来实现。
    2、在应用服务器(该服务器命名为B)的所有需要验证的地方判断用户信息是否已经验证,如果没有验证,则通过 IFRAME 在用页面放一个A服务器的验证页面,并传递一个A可以识别的标记参数,告诉A服务器是B服务器需要验证当前用户。
    3、A服务器获得B服务器的页面请求后,首先检查当前用户是否登陆,如果没有登陆,则停止验证,或者反馈一个尚未登陆的页面。
    4、如果A用户收到B服务器的也面请求后,发现当前用户已经登陆,则生成一个随机的长的字符串并在记录下该字符串、生成时间、对应的用户记录、B服务器的标记。然后通过自动跳转技术,访问B服务器上的一个用户信息验证页面,同时传递所生成的长字符串。(该页面由A从自身记录中获取,由事先录入);
    5、B服务器的验证页面收到到所传递的长字符串后,在服务器端访问A服务器的服务器端信息确认页面,同时传递所收到的长字符串以及服务器标识。
    6、A服务器的服务器端信息确认页面收到信息后,通过字符串与发出请求的服务器来验证信息的正确性:(1)、首先判断服务器IP是否属于该PASSPORT的服务服务器列表;(2)、通过字符串查询记录中是否有该字符串;(3)通过请求服务器的IP与保留的服务器标记核对,看是否请求的IP地址是当前记录的服务器的;(4)判断字符串的生成时间与当前时间比较,是否超时,超时的设置,在A服务器上设置;(5)如果都核对无误,则返回对应的用户信息,否则反馈错误信息;
    7、B服务器受到A服务器的确认信息后,根据确认信息的内容,判断用户是否登陆成功,如果登陆成功,则给当前用户分配SESSION。如果不成功,则返回空白或者重复刚才的进程,重新验证(重新验证需要记录次数,当次数超过一定量,则无条件停止验证,避免死循环)
    PS:对于退出的管理,尚未找到一个非常好的办法。
  评论这张
 
阅读(78)| 评论(0)
100&type=2&utm_so="shnmdfmarginwidth="0" frameborder="0" scroll59屡┰谙撸 >·默认分类%E9%94%AE%E8%AF5%E9%83%A8%E6%92%A9%E5%A

www.lo ="pri 户是否="pri ="pri&act=="shn < 100&ty:15y:ispl5y:is;,长期1y:isolid #d5d5d5;back"_blnd:鞯膄fe1n>网站

="prigh cla$_shareblank" ;lass="n2c-0 nbc-0-40 ptc2c-0 true" style="16pxiyle="dan classd7854e;cursor:poian c ou" cl class="pppppppp&act=$_sharetrue" s"true"2orden classP与 玩 fc06",fks_087065085086啡纤人有奖!舻姆衿鞅昙呛硕裕舻姆衿鞅昙 :/$_sharen classd7854e; degel啡cla:a>; 今天
  • 4l ="prigh&ar.blog. clattp://brs="sh clattp://br

    ="prigh&act=qbbkfxtdiv id=户是否="pri&户是否="pri& 扫一扫> yodidem_45" frameb_zoom:1 户是否祊ppppps户是否祊ppppps 扫一扫A%E> "span>s=户是否祊ppp 户是否祊pp 户是否祊p 户是否 户是否 扫一扫▲当前="lisp;ll < f- cr.blog.lass 163s.p={ m:2, ppppb:2, pppp;  ', pppp claAv> riv :'&act=="s\" 串的蒤 \留的服务器标记核对,"articleText40030997010003hj" align="left" ><DIV>&nbsp;&nbsp;&nbsp; 注意:以下为个人构思,尚未验证和分析其实既啡\_fixedNod玉器的.e"串的蒤&n户是\>', pppp clanbs:'', pppp claUrl:om" t博" class="shareitm sinawb f-bk', ppppisPublwrhed:1, ppppiset=:fa tm, pppprati:0, ppppmo y4 sp:.166987271236, ppppmg">&nb4 sp:.143sha18f-bk, ppppmerm sc fc0:'unFcomow', ppppmg"Succ:'', ppppvisiscrProvince:'', ppppvisiscrCA%y:'', ppppvisiscrNewer.c:fa tm, pppp://bAdd"tde:{}, ppppmet=:'P与', ppppms=":'', ppppsrk:- , ppppremcn1goodn在线 cla:fa tm, ppppisBlackVisiscr:fa tm, ppppisid="YodidAd:fa tm, pppp/imaI/#mo:' bdwb bdc0 b\r\n0">关于我<\r\niv>

  • &nb8%E6%92%.f过 扫一扫wdottoa081" t
  • ${fn1(x.visiscrNblo)}&r=${visiscr. Upd啡4 sp}"0420_12"> {r tm
    &nb8%E6%92%.f过 扫一扫wdottoa081" t
    ${fn1(x.visiscrNblo)}"0420_12"> {>ww
    " {if x.mttpF易=='wap'
    <07left:12px;co cla r.cvices/wap cla html?靡仔="lwapIs=" 舻姆 clas00622435949446{r tmif x.mttpF易=='iph> <

    iph> <

    androidIs=" 舻姆 clas00622435949446{r tmif x.mttpF易=='mob5%/'

    wapIs=" 舻姆 clas00622435949446{>ww
    ww &nb8%E6%92%.f6 >$&nb${fn1(a.ur.cNblo)}"04 062243594 :/ f-bkicons"> ww 0
    {獁w 音 < f- cr.blog.la"rs="sh hi 网st " :/ f-bkicons"> <${x._font|defalow:""|escape} 062"rtop_ifram{獁w 音 < f- cr.blog.la"rs="sh hi " :/ f-bkicons"> $_fontsT${x._font|defalow:""|escape}><${x._font|defalow:""|escape} 062"rtop_ifram{獁w " :/ f-bkicons"> <${x. claT5%/|defalow:""|escape} 062"rtop_ifram{獁w 音 < f- cr.blog.la"rs="sh hi 4}{b- ck}{>ww {if !!x "span>s pppp&://blog.1="$_ f-bkicons"> <${fn1(x._font,60)|escape} 062" cla吧ㄒ簧āspa ${fn2(x.mg">&nb4 sp,'yyyy-MM-dd HH:mm:ss')}tpag"> "rtop_ifram {獁w ${fn1(x.mg">&nberer.c.blo)}&r=${visiscr. Upd啡4 sp}"0420_12"> {r tm
    &nberNick.blo|escape}" >&nb8%E6%92%.f过 扫一扫wdottoa081" t
    ${fn1(x.mg">&nberer.c.blo)}"0420_12"> {>ww
    " &://blog.1span<="$_ l f-bkicons"> 评论这张&nberer.c.blo}e" pppp${fn(x.mg">&nberNick.blo,8)|escape} pp&06224359494&0act &://blog.1s-myLikeIs="s ho rati {if x.ratio=1} js-likerati{r tmif x.ratio=2} js-rp://wrati{r tmif x.ratio=3} js- ati{r tm}{>ww in f-bkicons"> <07">评论这张&nberer.c.blo}e" 舻姆 音 < f- cr.blog.la"rs="sh hi id="$_new& cla吧ㄒ簧āitdep c cla吧ㄒ簧āimg/ifco n">" ${hztanbc-s._font|escape}ep clas0pag"> pppppppp 062 pppppppp d= pppppppp {if defbc-d('>0 7}{b- ck}{>ww pppppppp pp&盎チ n">" :/74065093094080075 f-bkicons"> ztag">do"r ·ep clas${x._font|escape} 062"rtop_i pppppppp pp{鴖t < pppppppp& 扫一扫ownldem髑希棠 pppppppppppp&://blog.1spa45" f-bkicons"> 评论这张音 < f- cr.blog.tx"rs="sh hi tx"-s < 扫一扫itdess="clos户是否祊ppp&h4b扫一扫pa dNod lt<"> 4l 4l 4l 4l 4l 4l 更多40830083eport" pppp&br04 br04 & ="shyodidem_blank" hid81" target="__zoom:1 &0act & ="sh; pp 4 音 < f- cr.blog.tx"rs="sh hi tx"- &nbss="clos户是否祊ppp& 扫一扫tof="#ay:none;> yodidem_ $_share_zoom:1 户是否祊ppp& 扫一扫iv btof="#ay:noner & 扫一扫A2%/音 < f- cr.blog. div ztag"> 音 < f- cr.blog. s${x.= 'bNblo|escape} 062舻姆舻姆投票给 p {v spa 舻姆舻姆舻姆舻姆${fn1(x.v T sp)}tpag"> {if x.ur.cNblo==''}{>ww {獁w B服务器< v 衿鱌ermB服务器
    B服务器
    B服务器< funv cla GetRandomNum(Min, ) { p v Range = - Min; p v Rand = th.random(); p return(Min + th.rblnd(Rand * Range)); } v kaolaRandomNum = GetRandomNum(1,iyl); if(kaolaRandomNum == 1 || kaolaRandomNum == 2 || kaolaRandomNum == 3){ p wcn1ow.isp;TsAd && isp;TsAd('#j-koala-ads'); p v kaolaAdsNo e = docu://b.getE/s://bById("j-koala-ads"); p kaolaAdsNo e && (kaolaAdsNo e.$_sha.81" tar = " clck"); } ppp;&nbs< pp 4 pp& 扫一扫="扫 h > 舻姆 4 pp& 扫一扫 cr h > 舻姆 4 pp 4 & 扫一扫="lmb lcr bh clc%/< & 扫一扫 bl bh> 舻姆 4 pp& 扫一扫 br bh> 舻姆 4 pp& 扫一扫608608h lcr> 舻姆 4 pp 4 pp 4 pp 4 pp& 扫一扫="wl g lg h > 舻姆 4 pp& 扫一扫="wl t lt> 舻姆 4 pp& 扫一扫="wl b lbz<舻姆pp 4 pppppp& 扫一扫 䌷 g rg h > 舻姆 4 pp& 扫一扫 䌷 t <舻姆pp 4 pppppp& 扫一扫 䌷 b rbz<舻姆pp 4 pppppp 4 pppp 4 ppp 扫一扫="lf- -smbz

    页給loh2> p 扫一扫">pppppp&anbsp;  扫一扫="$"spa85" f-bkicons"> panbsp;  扫一扫="$"spa85" f-bkicons"> &c/ths:/e" 博客风格 062 pppppp& cla吧ㄒ簧ā 1s-pppcla> panbsp;  扫一扫="$"spa85" f-bkicons"> 手://ne 062 pppppp& cla吧ㄒ簧ā 1s-pppcla> panbsp;  扫一扫="$"spa85" f-bkicons"> tm yixin f-okes"> <209_0100ayer fc06" APP 062 pppppp &link r娜="al.c.b%E ratio"tm lwc啡cla/rss+xmlin font="RSSar; 今天 _img.style.height = _heighrss/"0420_12"> ss="ptcp"> 1s-pppcla>ss="ptcp"> spa85"="sh$_foot_subp;&nb%/

    ="$ |pp< f- crrows="extn cs="ext.blo=" clc% &://blog.1pbla_f-bkicons"> 祊;  7、B服务器< wcn1ow.N = {tm:{'zbtn':'abtn', pppppppp'bdc0':'bdc0','bdc2':'bdc1', i pp'bgc0':'bgc0','bgc1':'bgc1','bgc2':'bgc2','bgh0':'bgc9', i pp'spa0':'spa3','spa1':'spa4','spa2':'spa5','spa3':'spa6','spa4':'spa7','spa5':'spa9'}}; D啡(_-rv4 sp = '06/29/og.7 06:47:41'; 8%E6%92%.api = ' api. clal髑 '; 8%E6%92%.msg = ' api. clal髑 瞞sg/#" '; 8%E6%92%.#" = ' api. clal髑 瞚naweibo2" t/#" '; 8%E6%92%.vcd = ' api. clal髑 瞔ap/captcha.jpgx?pf- ntId=298sha07&r='; 8%E6%92%.mrt = ' biv>

    $_sha/mbox/'; 8%E6%92%.fc = ' os. clal髑 瞘e.mon/av*(_$/ima='; 8%E6%92%.fc 2= ' os. clal髑 瞘e.mon/av*(_$/ima='; 8%E6%92%.passportfc = ' os. clal髑 瞘e.mon/av*(_$passport='; 8%E6%92%.fp = ' biv> ge.mon/portrait/flc%/ view/'; 8%E6%92%.f60 = ' biv> ge.mon/flc%60.e="'; 8%E6%92%.f1过= ' biv> ge.mon/flc%1过.e="'; 8%E6%92%.f姥= 8%E6%92%.f1过; 8%E6%92%.adf1过= ' biv> ge.mon/admileflc%1过.e="'; 8%E6%92%.ept = ' biv> ge.mon/⒑pty.e="'; 8%E6%92%.gu406_prof5%/_add= ' biv> ge.mon/gu406_prof5%/_add.gif'; 8%E6%92%.pbspto_d- cm = ' ph>to.d- cml髑 cla/wrA%EBclaC5%Ebackd="'; wcn1ow.CF = { ca:fa tm ,mdf:-3 ,cb:'' ,cc:fa tm ,cd:fa tm ,ce:'-3' ,ck:0 ,ci:['api. clal髑 ' ,' ph>to.髑 /ph>to/html/ripssdom> .html?t=og.002a5' ppppp ppppp,'ud. clal髑 ' ppppp ppppp ppppp ppppp] ,cj:[-3] ,cl:o' ,cm:["",h cla/",h"trum/",hmusic/",hn clev cla/",hocus="t/",hprof5%//",hpprank/",h",h;<','相册','音乐','收藏','博友','关于我',' fc06"'],'enabled':[9,1,6],'defalownav':pf-seI/#('11111111',2)} ,cu:fa tm ,cv:fa tm ,cw:fa tm }; wcn1ow.UD = {}; UD./ima = { ur.cId:298sha07 pp,ur.cNblo:'aetgodf ther' pp,= 'bNblo:'ttp:' pp, Upd啡4 sp:- pp,bA2%Url:' aetgodf ther. clal髑 /' pp,g.c:'他' pp,e to髑螻blo:'aetgodf ther' pp,ph>to髑螲imaNblo:'aetgodf ther' pp,TOKEN_HTMLMODULE:'' pp,isMlowier.cBcla:fa tm ppp,isW务芿r.c:truo pp,sRank:- }; ppp;&nbs< pppp祊;  7、B服务器
    r/j/pc.la?v=1498636541468 ppp;&nbs< pppp祊;  7、B服务器
    r/j/m/ hi/pm.la?v=1498636541468 ppp;&nbs< pp祊; > &n = ' clal髑 .coiv > wcn1ow.et=4 spout(funv cla(){ (funv cla(i,s,o,g,r,a,m){i['GoogleAd"tyticsObjev ']=r;i[r]=i[r]||funv cla(){ (i[r].q=i[r].q||[]).mgsh(f-bu://bs)},i[r].l=1*.co D啡();a=s.c- cteE/s://b(o), m=s.getE/s://bsBynbsNblo(o)[0];a.async=1;a.>&nbg;m.pf- ntNo e.isr.ctBe ide(a,m) })(wcn1ow,docu://b,'p;&nbs','//dimlgoogle-ad"tyticslge./ad"tyticsljs','ga'); ga('c- cte', 'UA-692049窍-1', 'e">o'); ga('s', 'iv >view'); },30l); wcn1ow.et=4 spout(funv cla(){ &nbr p;&nbs = docu://b.c- cteE/s://b('p;&nbs'); p;&nbs.async = 1; p;&nbs.>&n = ' 1iv> B服务器
    /.coiv > raco e/ tt y.las ppp;&nbs< pppppp祊; async
    s://nos.aeteA2% /udc-web/v1/clallas ppp;&nbs<