浏览 2415 次
锁定老帖子 主题:浅析josso的php agent
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-09
本文通过浅析一个php agent的文件和一个sample来描述josso如何工作. josso版本 1.8.1 josso php agent的相关文件 nusoap php的一个ws相关的开发包。 josso-cfg.inc 配置文件。配置josso的url等等. class.jossorole.php 定义jossorole,只有name. class.jossouser.php 定义jossouser,只有name和properties. class.jossoagent.php 定义jossoagent,包含大量方法。 getNewInstance 用配置文件josso-cfg.inc里面的信息构造jossoagent. jossoagent 构造函数。 getUserInSession //Gets the authnenticated jossouser, if any. isUserInRole($rolename) findRolesBySSOSessionId($sessionId) accessSession //Sends a keep-alive notification to the SSO server so that SSO sesison is not lost. isAutomaticLoginRequired resolveAuthenticationAssertion josso.php 分为两部分 1 php逻辑,检查是否是ignored resource, 基于josso-cfg.inc. 如果是josso partner app的话,是否需要自动login. 2 方法的定义 //这一组是用来login,和logout的 jossoRequestLogin() //用$_SERVER['REQUEST_URI']作为currentUrl去做login,Use this function when ever you want to start user authentication. jossoRequestOptionalLogin() jossoRequestLoginForUrl($currentUrl, $optional) //为currentUrl做login,完成后会跳到josso-security-check.php jossoRequestLogout() //Use this function when ever you want to logout the current user. jossoRequestLogoutForUrl($currentUrl) //这一组是用来生成各种url的 jossoCreateAuthenticationUrl() //Creates a Authentication Url. 这个源文件里面的注释和变量名起的不好,容易误解。 jossoCreateLoginUrl() //Creates a login url for the current page, use to create links to JOSSO login page(josso-login.php). jossoCreateLogoutUrl($backToUrl) jossoSecurityCheckUrl //辅助的 forceRedirect($url,$die=true) createBaseUrl createFrontChannelParams //Add some request parameters like host name prepareNonCacheResponse 例子流程描述 1 index.php //通过agent拿到user和sessionId $user = $josso_agent->getUserInSession(); $sessionId = $josso_agent->getSessionId(); // Check if user is authenticated if (isset($user)) { //如果已经通过验证 //可以通过提供的多个方法得到该用户的用户信息,role信息等等. // logout url. echo 'Click <a href="'.jossoCreateLogoutUrl(NULL).'">here</a> to logout ...<br>'; } else { // User is unknown. 提供一个loginUrl,该方法生成的url会附加当前的url //生成的url类似于http://localhost/josso-php-partnerapp/josso-login.php?josso_current_url=/josso-php-partnerapp/index.php echo 'Click <a href="'.jossoCreateLoginUrl().'">here</a> to login ...'; } 2 josso-login.php //取出原有的url,保证做完login可以跳回该url $currentUrl = $_REQUEST['josso_current_url']; 去做认证,这里不会直接跳回currentUrl,而是先跳回josso-security-check.php,当然currentUrl的信息会保留,从而从josso-security-check.php跳到currentUrl 这里最终会到一个类似于http://localhost:8080/josso/signon/login.do?josso_back_to=http://localhost/josso-php-partnerapp/josso-security-check.php&josso_partnerapp_host=localhost的 url去做用户认证. jossoRequestLoginForUrl($currentUrl); 3 josso server的login. 4 josso-security-check.php //返回josso-security-check是不带sessionid的,只有assertion_id,通过assertion_id可以得到sessionId,然后放置在cookie里 $assertionId = $_REQUEST['josso_assertion_id']; $ssoSessionId = $josso_agent->resolveAuthenticationAssertion($assertionId); setcookie("JOSSO_SESSIONID", $ssoSessionId, 0, "/"); // session cookie ... $_COOKIE['JOSSO_SESSIONID'] = $ssoSessionId; //跳回原来的url,这里就是/josso-php-partnerapp/index.php $backToUrl = $_SESSION['JOSSO_ORIGINAL_URL']; forceRedirect($backToUrl, true); 5 index.php 跳回到index.php了.由于已经登录了,所以可以显示用户相关信息,同时给出一个logout的url. // logout url. // 和login时大同小异,类似于http://localhost/josso-php-partnerapp/josso-logout.php?josso_current_url=http://localhost/josso-php-partnerapp/index.php echo 'Click <a href="'.jossoCreateLogoutUrl(NULL).'">here</a> to logout ...<br>'; 6 josso-logout.php //实际去做logout,并且可以跳回本来的url,即index.php,这里和login不同,不用到josso-security-check.php去做check. $currentUrl = $_REQUEST['josso_current_url']; jossoRequestLogoutForUrl($currentUrl); 7 josso server的logout 8 index.php 又回到了1的状态. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |