`
zhang_xzhi_xjtu
  • 浏览: 538665 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

浅析josso的php agent

    博客分类:
  • Web
阅读更多
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 楼 ansen125 2014-06-19  
为什么我的不能跳回原来的地址呢?代码都用的官方的例子啊,登陆验证后,跳到一个空白页面地址这样的http://localhost/josso-php-partnerapp/josso-security-check.php?josso_assertion_id=DAC0B403EDD828DA

相关推荐

    单点登录JOSSO中间件

    JOSSO的设计基于代理模式,它通过一种称为Agent的组件来与各个应用系统交互。Agent安装在每个需要进行SSO的应用服务器上,负责拦截用户的请求,处理认证过程,并确保用户权限的安全传输。此外,JOSSO支持多种协议,...

    josso+tomcat配置之josso服务器配置(一)[参考].pdf

    josso+Tomcat配置之josso服务器配置 josso是基于Java的单点登录(SSO)服务器,能够提供身份验证和授权服务。Tomcat是Apache软件基金会开发的开源Java servlet容器。配置josso服务器需要将josso war文件部署到...

    Josso2.3 译文

    JOSSO,全称Java Open Single Sign-On Project,是一个开源的身份认证和授权框架,专注于提供单点登录(Single Sign-On, SSO)解决方案。在JOSSO2.3版本中,它支持在Apache Tomcat这样的Java应用服务器上部署和运行...

    JOSSO实现SSO

    ### JOSSO 实现 SSO 的关键技术点 #### 一、JOSSO 概述 JOSSO(Java Open Single Sign-On)是一个开源的、基于 J2EE 的单点登录(Single Sign-On, SSO)基础设施。其核心目标是为用户提供一种集中式、平台无关的...

    GlassFish+josso单点登录

    - Josso主要由三个部分组成:Josso Gateway、Josso Agent以及Josso Console。 - Josso Gateway作为中心认证服务器,负责处理认证请求并管理用户的登录状态。 - Josso Agent用于保护受保护资源,代理用户请求并...

    josso2:第二代JOSSO(Java开放式单点登录)

    在实现SSO的过程中,JOSSO的核心组件包括身份提供者(Identity Provider,IdP)、服务提供者(Service Provider,SP)和代理服务器(Agent)。身份提供者负责用户的身份验证,服务提供者是需要保护的应用,而代理...

    Glassfish + josso 单点登录范例

    ### Glassfish + Josso 单点登录实现及MD5加密技术详解 #### 一、引言 在现代企业级应用中,单点登录(Single Sign-On, SSO)已成为提高用户体验、增强安全性的重要手段之一。本文将详细介绍如何利用Glassfish应用...

    PyPI 官网下载 | python-josso-auth-0.1.3.tar.gz

    《Python-Josso-Auth库详解与应用》 在Python的开发世界中,后端库的选用至关重要,它们能够极大地提升开发效率并提供强大的功能支持。"python-josso-auth"是一个专门针对身份验证(Authentication)和授权...

    loginServer CAS / josso / LDAP / RBAC / ACL

    标题中的"loginServer CAS / josso / LDAP / RBAC / ACL"涉及到了多个IT领域的关键概念,这些都是构建安全、高效的企业级身份验证和授权系统的重要组成部分。以下是对这些概念的详细解释: 1. **CAS(Central ...

    josso-final

    4. **JOSSO架构**:研究JOSSO的核心组件,如Agent、Server、Console等,以及它们如何协同工作。 5. **配置JOSSO**:学习如何在JOSSO Server上配置认证服务,以及如何在应用中集成SSO Agent。 6. **安全考虑**:了解...

    whitespace-interpreter-php:PHP 中的空白解释器。 (因为为什么不呢?)

    $ git clone https://github.com/josso/whitespace-interpreter-php.git $ cd whitespace-interpreter-php $ php whitespace.php [filename.ws] 例子 $ php whitespace.php examples/helloworld.ws Hello, World ! $...

    JOSSO-开源

    Atricore的JOSSO是一种开源且受商业支持的Internet单点登录(FSSO)解决方案,用于点击和基于标准(SAML2)的Internet规模SSO实施。 欲了解更多信息,请通过以下网址与我们联系:http://www.josso.org

    josso-1.8.0-src.zip_Java 8_certificate x.509_java登录授权_sso 即插即用

    一个开源的J2EE-based的SSO(SSO:单一登录技术是一种认证和授权机制,它允许注册用户只需要在任一成员网站上登录一次,而后授权访问其他连接的分支网站,无需再进行验证登录)基础结构.它的目的是提供一种用来解决在...

    单点登录分析报告.pdf

    本文主要分析两种常见的SSO实现框架——JOSSO(Java Open Single Sign-On)和CAS(Central Authentication Service)。 JOSSO是一个基于Java和J2EE的开源SSO框架,其主要特点如下: 1. 100% Java实现,利用了JAAS...

    single sign on 分析报告

    JOSSO采用JAAS(Java Authentication and Authorization Service)标准,支持Web服务/SOAP、EJB、Struts、Servlet/JSP等技术,实现平台无关的用户验证。JOSSO的设计旨在简化SSO的实施和管理,适用于多应用环境。 ...

    基于cas单点登录的实现pdf

    3. **Agent-based(基于代理人)**:每个应用都有一个代理,负责与中心认证服务进行通信,获取或更新用户状态。 4. **Token-based**:使用令牌(token)进行身份验证,令牌可以是JWT(JSON Web Token)或其他形式的...

    java单点登录的实现与应用整合中SSO的技术实现.pdf

    其次,对于预算有限或者对SSO需求较低的项目,开源的SSO解决方案成为一种选择,比如JOSSO(Java Open Single Sign-On)、OpenSSO(现为ForgeRock的OpenAM)和SourceID。这些开源工具提供了基础的SSO功能,但可能需要...

    dm2e-gui:OmNom 的前端 web 应用程序,包括可部署的 tomcatjossofuseki 设置

    OmNom 的前端 web 应用程序,包括可部署的 tomcat/josso/fuseki 设置 捆绑: Tomcat 7.0.42 风木 0.2.7 JOSSO Tomcat 代理 1.8.7 dm2e-ws 1.0-快照 构建过程 bash bin/download-assets.sh all mvn package ...

    单点登录技术文档.doc

    JOSSO被认为更加成熟,支持Java、PHP和ASP等多种客户端。而CAS,由耶鲁大学开发,以其先进的设计理念、合理的体系结构、简单的配置、广泛的客户端支持以及成熟的技术,成为许多组织的首选。 ### 单点登录的实现机制...

Global site tag (gtag.js) - Google Analytics