JAccount

From SJTU Developers
Jump to: navigation, search

Contents

jAccount

jAccount认证体系是上海交通大学网络信息中心开发的用户认证体系,为学校师生员工提供网络服务的站点可以向网络信息中心申请加入jAccount统一身份认证体系,成为jAccount成员站点。

成为jAccount成员站点的优势

如何成为jAccount成员站点

对接jAccount认证的技术方案

对于单点登录,jAccount认证体系支持多种协议接入,目前公开提供的协议只有 OpenID Connect(OIDC)认证协议,,其他协议接入,请单独联系我们。

OpenID Connect(OIDC)认证

OpenID Connect 1.0 是基于OAuth2.0 的身份认证标准协议,OIDC使用OAuth2的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(比如服务端应用,移动APP,JS应用)。OIDC还完全兼容OAuth2,能实现应用服务的授权。OIDC本身是多个规范构成,已实现的规范内容包括:

jAccount统一认证接入

该部分介绍第三方应用如何接入jAccount统一认证

ID Token

ID Token是一个授权服务器提供的包含用户信息的JWT标准格式的数据结构,使用client_secret 进行VERIFY SIGNATURE。

ID Token的主要构成部分如下:

 {
  "iss": "https://jaccount.sjtu.edu.cn/oauth2/",
  "sub": "24400320",                               //当前登录的jAccount帐号
  "aud": "s6BhdRkqt3",                             //请求的应用的client_id
  "nonce": "n-0S6_WzA2Mj",
  "exp": 1311281970,                               //
  "iat": 1311280970,
  "name": "1311280969",                            //当前登录用户姓名
  "code": "123456",                                //当前登录帐号默认身份ID
  "type":"student"                                 //当前登录帐号默认身份类型,值请参考这里
 }

认证过程 Authentication

这部分介绍如何获取ID Token。因为OIDC是基于OAuth2的,因此OIDC的认证过程也是有OAuth2的几种授权过程延伸而出。主要有三种:

1. 使用Authorization Code授权过程获取ID Token和 Access Token的认证方式
2. 使用Implicit 授权过程的获取ID Token和 Access Token的认证方式
3. 使用Authorization Code + Implicit 混合授权过程的方式

该方式使用OAuth2 的 Authorization Code 授权过程来完成用户身份认证。

前提:

第三方应用需要具备 basic权限。(请参见 如何成为jAccount成员站点

认证步骤

详细步骤请参见协议文档,下面是关键步骤简化版示例。

2. Client sends the request to the Authorization Server.

  GET /authorize?
      response_type=code
      &scope=openid
      &client_id=s6BhdRkqt3
      &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
  Host: server.example.com

该请求成功后,流程进行到第5步,返回code,注意code时效在1分钟左右,且code是一次性的。


6. Client requests a response using the Authorization Code at the Token Endpoint.

    POST /token HTTP/1.1
    Host: server.example.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
       grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
       &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
       &client_id=s6BhdRkqt3&client_secret=sexxsdded

注意token request需要和之前code request的scope,client_id 相同。 成功后返回ID Token 和 Access Token

该方式使用OAuth2 的 Implicit 授权过程来完成用户身份认证。

前提:

第三方应用需要具备 basic权限。(请参见 如何成为jAccount成员站点

认证步骤

详细步骤请参见协议文档,下面是关键步骤简化版示例。 2.Client sends the request to the Authorization Server.

   GET /authorize?
      response_type=token
      &client_id=s6BhdRkqt3
      &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
      &scope=openid
      &state=af0ifjsldkj
      &nonce=n-0S6_WzA2Mj HTTP/1.1
   Host: server.example.com

Hybrid Flow则=Authorization Code Flow+Implicit Flow,不再详细介绍了

认证会话管理 Session Management

这部分协议只实现了logout部分。

RP-Initiated Logout

登出url:https://jaccount.sjtu.edu.cn/oauth2/logout

必需的参数:

  1. 应用id:client_id
  2. 回调地址:post_logout_redirect_uri

可选参数:

  1. state,提供时会通过回调地址回传。

OAuth

上海交通大学的开放API在OAuth的保护下提供服务,这意味着在访问任何一个API接口前,您的应用必须先从OAuth服务端获取相应的access token。

上海交通大学OAuth目前使用OAuth 2.0版本,为了向前兼容,也同时提供对OAuth 1.0a版本的支持,两个版本的关键参数见后。上海交通大学OAuth遵循国际标准,可以使用各种公开的开发包,请参考http://oauth.net/2/

OAuth2 地址

API授权

网络信息中心提供各类APIs,采用 基于OAuth2的授权体系的安全策略。目前支持的scopes请参见API Scopes

获取多scope的token。 scope值可以是 scope字符名称空格分隔,或者scope数值相加。 比如需要获取basic+essential, scope=basic essential 或者scope=3

四种授权过程介绍:

1.Authorization Code 认证过程

该授权过程需要资源所有者登录进行授权,是APIs的scope中最常用授权方式。

主要授权过程是:

 1.第三方应用按照协议规定向认证服务器发送请求;
 2. 认证服务器引导端用户登录;
 3. 认证服务器请求端用户授权;
 4. 认证服务器为端用户跳转回第三应用指定地址,并返回code;
 5. 第三方应用凭借code发起token 获取请求;并获得token信息。

第三方应用参与的是1和5。参与的请求示例请参考Open ID的 Authorization Code方式认证

2.Implicit Grant(待完善)

3.Resource Owner Password Credentials 授权(待完善)

4. Client Credentials Grant(待完善)

OAuth2开发支持

1. dotNet客户端

dotNet版本jAccount统一登录登出样例代码包下载

2.java支持

jar包sjtu-api.jar实现了OAuth2除Code授权模式以外其他授权模式和ProfileAPI,NotificationAPI,供开发使用和参考下载

jAccount认证接入方法(老)

网站认证基础接口

使用这种方式集成jAccount登陆时,网络信息中心会向您提供jAccount的开发包,目前支持java、dotNet和php三种开发环境。通过使用jAccount开发包所提供的功能,您的站点可以实现用户的登陆和登陆用户信息的获取。开发包的具体使用方法见后。

但是,出于对用户信息更严格的保护要求,网络信息中心一般不再接受这种方式接入的申请,而是推荐使用更加规范的应用开发高级接口

jaman.jar是jAccount的开发包,把它发到需要使用的web application的java路径中,通常是WEB-INF/lib。testsso1.jsp是一个demo页面,使用时,只需要在需要jaccount保护的界面中嵌入以下代码
<%@ page import="edu.sjtu.jaccount.*"  %> //放在页面的顶部
 
<%
	JAccountManager jam = new JAccountManager("jacw110330", getServletContext().getRealPath("/"));
	Hashtable ht = jam.checkLogin(request, response, session, request.getRequestURI());
	if (ht !=null && jam.hasTicketInURL) {
		jam.redirectWithoutTicket(response);
		return;
	}
%>
其中JAccountManager 是用于认证的类
jacw110330是JAccount分发的siteid,后一个参数是指明key文件的位置,如果不特别指定位置,将使用application根目录下的jakey目录。
在这段代码以后就可以处理application自己的session了。
/bin目录下的SJTU.JAccountManager.dll是jAccount的.net接口。jaxxxxx_desede.key是发给你们的站点密钥,需要放在App_DATA下面。
开发包的jatestweb目录下是一个测试用的web应用。其中login.aspx.cs及logout.aspx.cs是使用jAccount的统一认证的用法举例。其中要用到的你们的站点代码siteID是JAxxxxxxx。在调用checkLogin时要传入分配给你们的siteID(用实际分配给你们的siteID替换JAxxxxxx)。
php统一身份认证配置说明:
  1. 1、首先安装mcrypt库文件,以及iconv库文件
  1. 2、拷贝clsJAccount.php到web目录;
  1. 3、拷贝jamanager01234.key(这里的key名称是假设的)到服务器某目录(假设为:/opt/jakey);
  1. 4、将insert.txt中代码拷贝入需要PHP认证的页面,
依次设定:clsJAccount.php路径、jamanager01234.key路径、strReturnURL的文件
php SDK下载:File:JAccount-PHP-SDK-v20070417.zip
checkLogin 返回的Hashtable中包含了该用户的一些属性,包括:
属性名 属性值
uid 帐号名
student 帐号类型:yes(学生),no(教职员工),team(集体帐号),outside(校外用户),postphd(博士后),alumni(校友)
id 工号/学号
dept 部门/院系
chinesename 姓名

应用开发高级接口

这种接入方式的依赖两个基础设施:OAuth授权体系和开放API。具体的登陆过程为:

  1. 应用/站点通过OAuth获取到访问登录用户基本信息的access token
  2. 应用/站点使用access token调用Profile接口,获取用户的基本信息

在申请jAccount接入后,网络信息中心提供的siteid和secret同时也是OAuth应用的id和secret,默认网络信息中心会开通basic scope,以便应用/站点获取用户的基本信息。

网络信息中心提供的OAuth服务遵循OAuth 2.0国际标准,因此access token的获取可以使用各种公开的开发包,请参考http://oauth.net/2/Profile接口的访问方式参考开放API文档

从2016年8月开始,OAuth 2.0增加了对OpenID Connect的支持,当请求的scope中包含openid(或basic)时,返回的token中除了通常的access token、refresh token外,还同时返回id_token。id_token符合JWT标准[参考https://jwt.io/],含有如下域: sub -> 登录帐号,name -> 登录人姓名,type -> 默认身份,code -> 默认身份的id(如学工号),这样无需对接Profile接口即可获取登录用户的信息。

机构获取

对于需要限制登录人机构的可以参考机构代码: https://api.sjtu.edu.cn/v1/enterprise/organizes

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox