设为首页 收藏本站
查看: 291|回复: 0

[经验分享] 浅析josso的php agent

[复制链接]

尚未签到

发表于 2017-3-20 13:56:58 | 显示全部楼层 |阅读模式
josso是一个sso开源软件
本文通过浅析一个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的状态.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-352500-1-1.html 上篇帖子: php-asp-MSSQL 下篇帖子: 编译安装PHP-GD
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表