全部产品

JWT 模板使用指南

更新时间:2020-12-31 21:26

一、概述

IDaaS平台提供了基于JWT标准协议实现的应用插件,使用该插件,业务系统可以快速的接入IDaaS平台,从而完成单点登录。并且JWT应用插件支持从SP(业务系统)发起单点登录请求,跳转到IDaaS平台,进行登录,再跳转回业务系统完成JWT令牌认证和业务系统的登录。同时, 也支持从IDaaS平台直接发起单点登录请求,传递JWT令牌后, 在业务系统进行验证,完成登录。

本文档主要为JWT应用配置人员或开发人员提供完整的JWT应用配置过程或开发流程,并提供相应的SDK下载。

1.1 IDP/SP 发起单点登录的区别

Json web token ( JWT ), 是一种用于双方之间传递安全信息的简洁的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的方法用于通信双方之间以 Json 对象的形式安全的传递信息,该 token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。

同样, IDaaS平台提供的JWT单点登录应用插件支持IDP发起和SP发起,二者主要共同点在于整个JWT的认证流程(后半截)是相同的,都需要业务系统开发JWT令牌验证和解析的接口,并且需要根据解析出来的用户子账户信息,判断用户是否为该业务系统用户。如果需要跳转到特定页面, 用户可以通过在IDaaS平台填写target_url(填写地方请参考操作步骤 Step1 创建JWT应用),或者在SP发起地址后面拼接target_url请求参数(注:个别SP开发的针对线上老版本IDaaS的SSO, target_url参数当初是以redirect_url参数来接收的),以实现页面二次跳转,达到deep-linking的目的, 上述功能和SAML中的RelayState是一致的。

IDP发起和SP发起二者的不同点在于从IDaaS平台发起单点登录,用户可以通过点击IDaaS平台首页的JWT应用,就能完成JWT令牌认证和业务系统的登录。从SP(业务系统)发起单点登录,系统不一定已经完成了IDaaS平台的登录,或者登录信息过期失效,这时候IDaaS系统会跳转到登录页面,登录完成后,再继续完成JWT令牌认证和业务系统的登录。

二、实现原理

123

上述时序图阐述了基于JWT发起SSO登录请求时的基本流程,该流程主要分为以下6个步骤:

1)用户通过浏览器访问 IDaaS应用服务 。

2)浏览器向IDaaS发起单点登录请求。

3)IDaaS 生成 JWT token 令牌发送到业务系统。

4)业务系统获取到 token 令牌,用提供的插件或方法解析验证 JWT token 令牌,解析成功获取到用户信息并验证用户是否存在于业务系统中。

5)业务应用服务器创建自己系统的请求会话,然后跳转到指定路径。

6)浏览器显示应用页面,完成sso登录。

验证通过:业务系统重定向到用户首页,或指定的二级页面。

验证失败:业务系统拒绝登录并页面提示错误信息。

三、对接流程图

下面是开发对接一个新的应用支持JWT协议SSO的过程。

image

3.1 主要流程

该流程主要帮助开发者理解和集成一个SP应用支持JWT单点登录,从而完成整个JWT应用模版的使用。流程主要分为以下6步:

Step1 创建JWT应用

该步骤主要帮助开发者在IDaaS平台创建一个JWT应用,让SP(业务系统)系统能接入IDaaS平台的JWT SSO登录,在该步骤中,主要是一些必要字段的填写,以便于完成后面的整个流程。

Step2 SDK下载

该步骤主要帮助开发者更加便捷的开发JWT token验证接口。使用IDaaS提供的JWT 验签SDK包,便于开发后续的JWT 验签接口。

Step3 业务系统研发

该步骤主要帮助开发者开发自己业务系统的JWT 验签接口,完成业务系统的用户验证和登录。

Step4 IDaaS上更新SSO地址

该步骤主要帮助开发者在完成JWT验签接口开发工作后,进行必要的接口验证工作。如果第一次在IDaaS平台创建JWT应用时,填写的JWT 验签接口不准确(redirect_uri),可以再次更新该地址。

Step5 单点登录效果验证

该步骤主要帮助开发者验证JWT应用配置的完整性和自己开发的JWT验签接口是否正确,验证SSO登录流程是否能正确完成。

Step6 完成

四、操作步骤

4.1 Step1 创建JWT应用

4.1.1 登录 IDaaS 管理员平台。

使用 IT 管理员账号登录云盾 IDaaS 管理平台。具体操作请参考 IT管理员指南-登录

4.1.2 添加 JWT 应用。

在【应用】-【添加应用】中,找到应用名称为: JWT,点击右边【添加应用】按钮。(注意:请不要选择成jwt证书)

image

4.1.3 填写信息并保存

根据需要填写如下信息:

添加JWT.jpg

IDaaS平台提供的参数, 具体如下:

1. 图标:业务应用的 logo 图片。

2. 应用 ID: IDaaS自动生成的应用 ID,不允许修改,且唯一。

3. 应用名称: 填写创建应用的名称。

4. 应用类型: 代表该服务支持的设备类型,标记使用。

5.SSO Binding:单点登录请求方式,REDIRECT 为 GET 类型,也可选择 POST。

7.ID_Token有效期:单位秒。

8.是否显示应用:授权给用户后,是否在用户的IDaaS平台首页显示,默认开启。若关闭,用户登录IDaaS平台首页,将看不到该应用。

9.账户关联方式:

a.账户关联(系统按主子账户对应关系进行手动关联,用户添加后需要管理员审批)

b.账户映射(系统自动将主账户名称或指定的字段映射为应用的子账户)

SP(业务系统)需要考虑的参数:

一个全新的应用从不支持JWT, 到支持, 需要开发几个URL,以下为两个重要参数:

1. redirect_uri:业务系统中(或 PC 程序)的 JWT SSO 地址,在单点登录时 IDaaS 将向该地址用[GET]方式发送 ID_Token 信息,参数名为id_Token,业务系统通过 ID_Token 与 Public Key 可获取JWT token中的用户信息。

2. target_url: 业务系统中在通过JWT系统完成身份认证成功后,重定向的 URI。一般是一个http开头的URI,用于跳转到二级页面等。若设置了该 URI,在IDaaS平台在完成JWT协议身份认证成功时,会以参数 target_url传递该值,若未设置该值,若此时SP发起的SSO请求中有参数target_url,则会按照请求参数传递该值,此项可选。如果target_url为空,由SP决定跳转到哪个页面, 一般是默认的门户页面。

4.1.4 导出公钥

基于JWT的非对称签名/验签机制, 完成上面应用创建,私钥保存在IDaaS 后台,作为签名使用, 公钥需要导出传递给SP验签使用。 在【应用列表】中,就可以找到新创建的应用。点击【详情】按钮,点击【查看详情】。

image

找到 JWT PublicKey

复制粘贴到文本txt,或者使用下方导出,都可以将 JWT PublicKey 导出。将其交给需要接入JWT协议认证的SP业务系统,用作 ID_Token 的验签解析。

image

4.2 Step2 SDK下载

在这里,IDP配置好了, 第三方业务系统SP就要开始研发的准备工作了。所有需要接入JWT应用源的SP都需要开发相对应的JWT id_token的SSO接收接口,该接口主要用于id_token的解析,签名验证,和用户信息的抽取。然后在业务系统中对比获取到的用户信息,对比成功后,创建业务系统自己的登录会话,完成SSO登录。

IDaaS提供 4 种语言的 SDK 集成方式:JAVA/PHP/.NET/Python :

JAVA SDK下载

JAVA SDK - JDK 1.6

JAVA SDK - JDK 1.7

JAVA SDK - JDK 1.8

PHP SDK下载

PHP-JWT-SDK

.NET SDK下载

.NET-JWT-SDK

Python SDK下载

Python-JWT-SDK

当然,如果您的业务系统是除此之外其他语言也可以进行对接,需要您自行编写解析 ID_Token 的代码,需要可以参考

JWT 官网。

4.3 Step3 业务系统研发

如上所述, SP研发核心需要考虑的:

1)能够接收到令牌

2)能够成功验签解析令牌,拿到用户Sub信息

3)匹配用户信息是否与当前自己的子账号一致,完成匹配之后,创建业务系统自己的会话

4)跳转至用户首页

4.3.1 JAVA 插件式集成

配置环境

根据java JDK版本,选择相对应的SDK版本,如常用的java JDK版本为1.8,请选择

JAVA SDK - JDK 1.8

接收令牌

假设IDaaS通过POST或Redirect 将id_token 传递到SP,SP首先需要提供一个SSO的URL

接收示例:

https://localhost/JWT/sso/login?id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwMjQxNjE0NzI2Nzg2MjI0NjgifQ

// id_token 是 IDaaS 请求时带来的,在 requestParam 里获取,PublicKey是在 IDaaS 里注册应用时生成的,注册完可见,此示例代码是获取用户信息。
// JWT SSO
@RequestMapping(value = “/JWT/sso/login”)
public String SSO Url(@RequestParam String id_token, String target_url, Model model, HttpServletRequest request){
  //1.接收方法为GET方式,参数名为 id_token
  //2.<解析令牌>为解析 id_token 并验证代码
}

解析令牌

拿到id_token 后, 为了保证不是重放或中间人攻击, 需要对其进行验签,前面导出的PublicKey主要被用于这个目的。注意, 不同语言的SDK可能用到的PublicKey格式是不同的。

//1.使用公钥,解析 id_token
// 使用PublicKey解析上一步获取的 id_token 令牌,并验证id_token
DingdangUserRetriever retriever = new DingdangUserRetriever( id_token, PublicKey);
DingdangUserRetriever.User user = null;
try {
  //2.获取用户信息
  user = retriever.retrieve();} catch (Exception e) {
  LOG.warn(“Retrieve SSO user failed”, e);
  return “error”;
}
//3.判断用户名是否在自己系统存在,isExistedUsername()方法为业务系统自行判断数据库中是否存在
if (isExistedUsername(user.getUsername())) {
  //4.如果用户存在,则登录成功,然后创建业务系统自己的会话(如session的更新),具体操作,根据各自业务系统的需要进行开发,以下只做示例
  User SPUser = userService.updateLoginTimes(user.getUsername());
  request.getSession ().setAttribute(HttpSessionSecurityContextRepository. SPRING_SECURITY_CONTEXT_KEY, saveSecurity( SP User));
  //5.如果请求参数中带有target_url(注:线上有些版本参数名为redirect_url),那么返回此指定的url页面
 if (StringUtils.isNotEmpty(target_url)) {
    return “redirect:” + target_url;
  }
  //6.否则返回SP自定义的默认操作页面
  return “redirect:../../index”;
} else {
  //7.如果用户不存在,返回登录失败页面,提示用户不存在
  model.addAttribute(“error”, “username { “ + user.getUsername() + “ } not exist”);
  return “error”;
}

4.3.2 PHP插件式集成

配置环境

在本例中,使用composer管理一个第三方JWT库(可选)。

同样, 假设IDaaS通过POST或Redirect 将id_token 传递到SP,SP首先需要提供一个SSO的URL。

接收示例:

https://localhost/JWT/sso/login?id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwMjQxNjE0NzI2Nzg2MjI0NjgifQ

接收令牌

如上, JWT 的 id_token 将会以url参数的方式传进callback页面(同JAVA的),直接将其读取出来:

/* 使用composer 载入 php-JWT第三方库
* 命令行 composer require firebase/php-JWT
* 库链接:https://github.com/firebase/php-JWT
* 使用Firebase的这个第三方库来实现对JWT的解密,如果不用composer的话,请自行添加源文件
* 你也可以使用其他能对 JWT token 进行RS256解码的工具或库
*/
// 在这里将 JWT 库引入,在这里为了便捷demo直接使用
// 推荐使用
require 'vendor/autoload.php';
use \Firebase\ JWT \ JWT ;
// 本地存储public key公钥的位置
$public_key_location = “LOCATION/TO/YOUR/PUBLIC-KEY/XXX.pem”;
// 读取公钥信息,公钥在这里存储在一个.pem文件内
$public_key = file_get_contents($public_key_location);
// 从url的参数中读取 id_token ,即令牌
if (!empty($_GET[“ id_token “])) {
  $JWT = $_GET[“ id_token “];
  // 这里继续第二步:解析令牌
}

获取到id_token之后,接下来就是对令牌的解析和验签步骤。

解析令牌

拿到id_token 后, 为了保证不是重放或中间人攻击, 需要对其进行验签,前面导出的PublicKey主要被用于这个目的。利用第三方库 php-JWT进行验签,获取到用户信息。验证通过后创建业务系统自己的会话,然后再跳转到SP登录后页面,失败则拒绝, 返回SSO失败页面:

phptry{
  /**
  * You can add a leeway to account for when there is a clock skew times between
  * the signing and verifying servers. It is recommended that this leeway should
  * not be bigger than a few minutes.
  *
  * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
  */
  // Firebase的 JWT 库的一个参数,不出问题的话可以忽略
  // (可选)当服务器时间与本地时间不符时,可以通过这个leeway参数来调整容错
  JWT::$leeway = 60; // $leeway in seconds
  // 使用公钥、使用RS256算法对 JWT (即第一步传进来的 id_token )进行解密进行解密
  $decoded = JWT::decode($JWT, $public_key, array('RS256'));
  // 将解密的结果从class转化成PHP array
  $decoded_array = (array) $decoded;
  // 打印出解密的结果,成功!
  print(“解密结果:<br>”);
  foreach ($decoded_array as $key => $value) {
    print $key . “: “ . $value . “<br>”;
  }
  // 获取到用户信息后,判断该用户是否存在于你的系统内
  if (userExistsInSystem()) {
    // 如果用户存在,那么登录成功

        //登录成功后,创建业务系统自己的会话,略

        //会话创建完成后,如果有target_url参数,跳转到该地址
  } else {
    // 如果用户不存在,那么登录失败,跳转到显示错误页面
  }
catch(Exception $e) {
 print “错误:” . $e->getMessage();
}

4.3.3 .NET插件式集成

配置环境

.NET Framework 4及以上。

同样, 假设IDaaS通过POST或Redirect 将id_token 传递到SP,SP首先需要提供一个SSO的URL。

接收示例:

https://localhost/JWT/sso/login?id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwMjQxNjE0NzI2Nzg2MjI0NjgifQ

接收令牌

如上,JWT 的 id_token 将会以url参数的方式传进callback页面(同JAVA的)

// id_token 是 IDaaS 请求时带来的,在body里获取,PublicKey是在 IDaaS 里注册应用时生成的,注册完可见,此示例代码是获取用户信息。
// JWT SSO
[Route(“jwt/sso/login”)]
public ActionResult ssoUrl(String id_token ){
  //1.接收方法为GET方式,参数名为 id_token
  //2.<解析令牌>为解析 id_token 并验证代码
}

解析令牌

拿到id_token 后, 为了保证不是重放或中间人攻击, 需要对其进行验签,前面导出的PublicKey主要被用于这个目的。如果成功,获取用户信息,然后创建业务系统自己的会话,最后跳转进入SP用户登录后的页面, 否则返回SSO失败页面。

//1. 使用公钥,解析 id_token
string username;
DingdangSDK.DingdangUserRetriever retriever = new DingdangSDK.DingdangUserRetriever( id_token, PublicKey);
DingdangSDK.User user = null;
//2. 获取用户信息
user = retriever.retrieve();
username = user.sub;
//3. 判断用户名是否在自己系统存在
//4. 如果用户存在,则登录成功,创建业务系统自己的会话,返回登录成功后的页面,略
//5. 如果参数中有target_url,那么返回此SP指定的url页面
//6. 否则返回系统默认操作页面
//7. 如果用户不存在,返回登录失败页面,提示用户不存在

4.3.4 python插件式集成

下载资源库

本Python JWT 示例使用Py JWT 库来进行 JWT 的解析。

假设IDaaS通过POST或Redirect 将id_token 传递到SP,SP首先需要提供一个SSO的URL。

接收示例:

https://172.168.0.1/JWT/sso/login?id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwMjQxNjE0NzI2Nzg2MjI0NjgifQ

// 库的 github 链接 https://github.com/jpadilla/pyJWT
pip install Py JWT
// 注:CentOS系统如果使用时无法导入算法 RSAAlgorthm时需要下载pyJWT的2个依赖包
yum install ibffi-devel
pip install cryptography

接收令牌

如上,JWT 的 id_token 将会以url参数的方式传进callback页面(同JAVA的)。

def get_id token ( token ):
  if not token .strip():
    print(' token 信息不能为空')
  else:
    //这里继续第二步:解析令牌
get_id token (my_id token ); // 运行程序

解析令牌

拿到id_token 后, 为了保证不是重放或中间人攻击, 需要对其进行验签,获取用户信息,前面导出的PublicKey主要被用于这个目的。验证通过后创建业务系统自己的会话,然后再跳转到SP登录后页面,失败则拒绝, 返回SSO失败页面。注意, Python库需要的PublicKey格式不一定是和其它一致的。开发前需要在IT管理员权限下前往应用->详细->导出 PKCS8 公钥来获取解密 JWT 用的公钥,并安全地放置在能访问到的目录内。

## 2.解析令牌
通过JWT解密库,使用公钥对传入的 id_token 进行解密。将公钥以字符串的形式从文件中读取出来,并作为key进行解密:
// 引入用到的包文件
import JWT
import json
from JWT.algorithms import RSAAlgorithm
from JWT.utils import force_bytes
from utils import key_path 
// 本例中key_path辅助方法是写在utils工具类中的
def get_user_ifon( id_token ):
  try:
    algo = RSAAlgorithm(RSAAlgorithm.SHA256)
    pem_key = open(key_path('D:\pythonDemo\key\public_key_pkc8.pem'), 'r')
    public_key = algo.prepare_key(pem_key.read())
    token_info = JWT.decode(force_bytes( id_token ),key=public_key,verify=True)
    user_info = json.loads(json.dumps( token_info))
    username = user_info['sub']
    print(username)
    # 3.判断用户名是否在自己系统存在
    # 4.如果用户存在, 则登录成功,创建业务系统自己的会话,返回登录成功后的页面,略
    # 5.如果参数中有target_url,那么返回此指定url页面
    # 6.否则返回系统默认操作页面
    # 7. 如果用户不存在, 返回登录失败页面, 提示用户不存在
  except Exception as e:
    print(e)

上面用到的key_path方法是用来获取存放在硬盘上的public key位置的辅助方法,具体如下:

def key_path (key_name):
 return os.path.join(os.path.dirname(os.path.realpath(__file__)), 'keys', key_name)

总之,在完成JWT令牌的接收,验签和解析之后,业务系统需要根据JWT令牌解析出来的的用户信息,判断用户是否存在于当前业务系统中。如果用户存在,业务系统创建自己系统的会话请求(如存放session,生成cookie等,请根据业务系统各自要求去实现),以保证用户的登录状态。然后判断是否有target_url参数,如果有该参数,那么返回该参数指定的url页面,从而完成SSO的登录。

4.4 Step4 IDaaS上更新SSO地址

由于在第一步创建应用时,SSO 单点登录地址(即redirect_uri)不一定是SP开发完成后正确的URL。 所以,当业务系统开发工作结束后,有可能需要再返回 IDaaS 平台,以IT管理员身份,将这个地址进行更新,后续才能进行下一步的联调测试工作。

image

4.5 Step5 单点登录效果验证

4.5.1 从IDaaS发起单点登录

在完成IDaaS平台的redirect_uri更新之后,开发者可以新建一个测试账号进行单点登录效果验证,以确保JWT的应用源接入成功。

4.5.1.1 新建一个普通账号

image

4.5.1.2 账号授权

在新建账号时,会自动授权,比如可以看到给授权的应用,然后点击下一步,完成账号授权。

image

或者用另外一个方式,使用【授权】-【应用授权】- 【按账户授权应用】功能,给账号分配需要测试的 JWT 应用。

image

4.5.1.3 使用测试账号登录

使用测试账号登录后,即可看到创建的JWT测试应用 logo图标。

image

注:若此时无法看到图标,请检查

(1)应用是否开启?(【应用列表】查看及开启)

(2)账号是否被授予应用权限?(【应用授权】查看及授权)

4.5.1.4 业务系统检查是否能获取到 id_Token

下一步, 点击这个图标后,会触发一个SSO URL(地址示例:https://www.example.com/sso/login?id_token=xxxx), 通过检查IDaaS系统发送的id_token 和业务系统(SP)收到的id_token是否一致,从而确保业务系统能正确获取id_token。

(1)首先登录IDaaS系统

(2)点击应用 logo

(3)可以在浏览器地址栏中看到 id_token 及SP二级页面的target_url信息,例如:

image

(4)也可以使用浏览器的 [开发者工具] 看到 id_token 信息,

image

(5)如果id_token 正常,此时业务系统就需要检查是否能够收到 IDaaS 发送的 id_token 并且成功解析验签,获取用户信息。

4.5.1.5 检查是否能正确跳转到业务系统指定页面

如业务系统成功获取并解析 id_token 正常,就应该能成功创建业务系统自己的会话(如session更新,生成cookie等),然后跳转到业务系统指定的页面。

4.5.2 从业务系统(SP)发起单点登录

上面介绍完了IDP发起, 下面介绍SP发起的SSO过程。

SP发起的URL地址由IDaaS平台在创建JWT应用时,自动创建,用户无法修改,例如:https:///enduser/sp/sso/{应用ID}?enterpriseId={公司ID}(业务系统(SP)需要把SSO单点登录请求发送到该地址。)

从SP发起的SSO单点登录请求,一般情况下,都是用户在业务系统的页面首先进行操作,如用户点击邮箱地址(

http://www.example.com/?email=100

),此时,用户在未登录的情况下,邮箱服务需要把用户页面重定向到SP发起地址。然后用户在IDaaS完成登录,最后再次跳转到登录前的业务系统页面,即用户邮箱地址(

http://www.example.com/?email=100

)。

4.5.2.1 业务系统配置SP发起地址

一般情况下,SP的开发者需要开发相应的代码来完成整个SP发起的 SSO流程。

首先,开发者需要在业务系统开发中,添加SP发起地址(如业务系统首页的第三方登录按钮,或者在业务系统的登录拦截器),当用户需要登录业务系统时,页面需要重定向到SP发起地址, 同时SP系统应该把当前的URL, 生成一个随机数关联保存在本地, 把这个随机数作为target_url 传递给IDaaS。

SP发起地址获取方式:

请在IT管理员权限下前往应用->应用信息->点击【SP发起地址】进行复制。

sp.jpg

SP发起地址示例:

https:///enduser/sp/sso/{应用ID}?enterpriseId={公司ID}&target_url=XXX

其中:

target_url:该参数为SP系统开发者可选参数,如果添加了该参数,IDaaS在完成登录后,会优先使用该值,覆盖在创建JWT应用时,填写的target_url,并把该值返回给SP。

应用ID:在IT管理员权限下前往应用列表 -> JWT应用源的应用ID。

2.jpg

公司ID:在IT管理员权限下前往设置 -> 个性化设置 -> 公司信息 查看。

3.jpg

4.5.2.2 从业务系统(SP)发起登录

在浏览器输入业务系统(SP)的地址,比如用户现在需要登录邮箱,此时用户首先点击的就是邮箱地址(如

http://www.example.com/?email=100

),然后邮箱服务需要把浏览器重定向到业务系统配置好的SP发起地址(如https:///enduser/sp/sso/{应用ID}?enterpriseId={公司ID}&target_url=XXX)。

如果用户未登录,会跳转到IDaaS统一登录页面,进行登录。登录完成后,IDaaS系统会将浏览器重定向到redirect_uri地址(redirect_uri地址请在IDaaS平台 ->应用列表->应用信息里面查看)。

redirect_uri.jpg

并且带上id_token及target_url参数。为了兼容老版本IDaaS平台,早期使用redirect_url来起到target_url相同的效果的, 注意redirect_url 和 redirect_uri 的区别, 所以现在请求参数中会返回target_url和redirect_url两个相同值的参数,参数的值都为需要跳转的二级页面地址,并且优先使用业务系统在SP发起地址里拼接的target_url。当业务系统没有在SP发起地址里拼接具体的target_url参数时,IDaaS系统会采用在创建JWT应用时,填写默认的target_url。

redirect_uri地址示例:

https://www.example.com/sso/login?id_token=xxxx&redirect_url=yyyy&target_url=yyyy, 如下图所示, 会有3个参数拼接到地址后面。

3DCA4883-6477-4c1f-B993-84F97E7CD59C.png

最后业务系统(SP)完成JWT令牌的验签和用户信息匹配的工作。验签成功后,业务系统将创建本系统的请求会话,然后把浏览器重定向到target_url地址。

4.6 Step6 完成

当所有测试工作结束后,就在 IDaaS 上完成了 SSO 单点登录的对接工作。如果IDaaS系统和SP(业务系统)都是使用的测试环境,那么在正式上线切换时,需要再次将 JWT 模板中的地址修改为正式生产环境的地址。

五、FAQ

5.1 提示MAVEN库错误

如果是找不到这个maven库依赖:

image

该SDK是由IDaaS提供不是从官方下载,没有官方的maven仓库,可以手动将Step2里面下载的SDK,安装到引用的maven库中。用idea的话,刷新下图位置,就能引入到本地maven中。

image

或者通过IDEA的Module Settings,手动添加JWT-SDK 本地jar包。

125