# 统一认证登录

# 流程介绍

单点登录集成由hos统一认证提供接口服务,采用标准的OAuth2.0协议

应用系统使用OAuth2登录流程:

使用OAuth2登录流程

应用系统接入OAuth2流程:

接入OAuth2流程

# 应用系统集成--基于HOS开发的系统


提示

如果应用系统不是基于HOS基础平台开发的,请参考下一章节【应用系统集成--普通BS应用系统】 以下面的ip和端口为例介绍配置,实际地址需要根据项目实际环境来修改。
统一认证配置访问地址:http://114.251.235.9:8331;
统一认证服务ip和端口地址:http://114.251.235.9:8344;
OA应用的前端地址:http://192.168.101.100:8111;
本文档以此端口+ip为例,搭建项目根据实际情况进行修改

# 第一步,注册系统

统一认证配置访问地址:http://114.251.235.9:8331

接下来以OA系统为例,在统一认证配置平台,配置OA系统;

1.1 新增应用系统,OA系统

2. 进入【应用中心】->【应用管理】

应用系统注册

B/S系统注册

2.1 认证基本信息;

注册成功应用系统后,选择应用进入应用详情页面

统一认证配置-基础配置

2.2 配置应用系统认证信息


提示

  • 回调地址(redirect_uri)接收授权码的地址,可以配置多个,使用间隔符“,”,格式为http(https)://{应用ip}:{应用端口}/api/security/login/oauth2/code/messaging-client-oidc.示例:https://117.107.157.46:8120/api/security/login/oauth2/code/messaging-client-oidc。
  • 单点退出(logout_uri):开关,控制是否进行统一认证退出,打开后,需要配置登出地址。登录地址格式为http(https)://{应用ip}:{应用端口}/api/security/oauth2/token/logout。示例:https://117.107.157.46:8120/api/security/oauth2/token/logout。
  • 授权模式(response_type):目前只支持授权码模式,如果需要返回刷新token,需要同时选中授权码模式和刷新token。
  • 作用域(scope):访问权限类型,填写openid即可。

选择应用功能--->认证管理,配置OA系统的回调地址,默认配置一样

回调地址配置

2.3 生成OAuth2参数


提示

维护好应用系统基础信息后,点击保存会自动生成客户端id(client_id)和客户端秘钥(client_secret),这两个参数是后续调用接口操作中的关键参数。

应用系统注册-OAuth参数配置

2.4 下一步需要用到的参数


提示

客户端id(client_id):G5Jh27LXXdRf
客户端秘钥(client_secret):n3p529n6743NP6H3
回调地址(redirect_uri):http://114.251.235.9:8331/api/security/login/oauth2/code/messaging-client-oidc

# 第二步,应用系统的启动工程新增登陆相关依赖包

在启动工程的pom文件中新增依赖

 <dependency>
    <groupId>com.mediway.hos</groupId>
    <artifactId>hos-security-login-database</artifactId>
 </dependency>

 <dependency>
    <groupId>com.mediway.hos</groupId>
    <artifactId>hos-app-core</artifactId>
 </dependency>

# 第三步,接入的应用系统后端配置

1. 打开需要修改的文件


提示

根据实际环境修改对应的yml配置文件; 以开发环境配置文件application-dev.yml文件为例介绍;文件位置如下图所示

后端配置文件位置

2. 修改或增加文件内容


提示

以下面的ip和端口为例介绍配置,实际地址需要根据项目实际环境来修改。
统一认证服务ip和端口地址:http://114.251.235.9:8344;
OA应用的前端地址:http://114.251.235.9:8331;

spring:
  redis:
    password: hck4yCMd9
    database: 0
    timeout: 5000
    cluster:
      nodes: 114.251.235.6:32543
smscaptcha:
  templateId: 1 #短信模板编码
  smsSp: rly  #短信厂商编码
  validField: 1 #字段位置
  timeField: 2 #短信时效,单位是分钟
hos-security:
  platform: platform
  front-url: http://114.251.235.9:8331                  #应用前端页面地址
  authentication-uri: http://114.251.235.9:8344             #统一认证地址
  login:                                                #登录相关配置
    white-list:                                         #认证白名单
      - /openApi/**
      - /druid/**
      - /license/*
      - /loginPageData/*
      - /property/is-enable-tenant
      - /tenant/select-tenant-by-domain
      - /tenant/select-tenant
      - /core/system/files/other/**
      - /core/system/files/image/**
      - /websocket/
      - /favicon.ico
      - /v2/api-docs
      - /swagger-resources
      - /acm/accountAndPWD/validateAccount
      - /doc
      - /**/*.css
      - /**/*.js
      - /**/*.png
      - /**/*.jpg
      - /**/*.jpeg
      - /**/*.html
      - /**/*.ico
      - /**/*.properties
      - /**/*.woff
      - /**/*.woff2
      - /**/*.ttf
  oauth2:                                               #统一认证oauth2登录配置
    enable: true                                        #是否开启统一认证登录
    client:                                             #统一认证登录配置
      registration:
        messaging-client-oidc:
          provider: spring                              #对应下边 provider 的配置,不需要修改
          client-id: G5Jh27LXXdRf                   #统一用户平台中创建应用的id
          client-secret: n3p529n6743NP6H3                         #统一用户平台中创建应用的秘钥
          authorization-grant-type: authorization_code  #认证类型,不要修改
          redirect-uri: ${hos-security.front-url}/api/security/login/oauth2/code/messaging-client-oidc  #回调地址,不要修改
          scope: openid                                    #统一用户平台中创建应用的作用域
          client-name: oa                          #该客户端名称
      provider:
        spring:
          issuer-uri: ${hos-security.authentication-uri}/api                      #发行地址
          authorization-uri: ${hos-security.authentication-uri}/oauth/authorize   #获取授权码页面

# 第四步,集成完成,测试

1. 访问OA系统地址,http://114.251.235.9:8331 会跳转到统一认证服务登录页面

http://114.251.235.9:8344/login/login?redirect=%2Foauth%2Fauthorize%3Fresponse_type%3Dcode%26client_id%3Dmessaging-client%26scope%3Dopenid%2520profile%26state%3D9PdAHYDbJl_N_aVahJ52lVj0Pno9NjaKePO4G5w8weI%253D%26redirect_uri%3Dhttp%253A%252F%252F114.251.235.9%253A8334%252Fapi%252Fsecurity%252Flogin%252Foauth2%252Fcode%252Fmessaging-client-oidc%26nonce%3DzqLZcN4wYxqTmHBiBSLPolWfFe6rgjb42k_r_YpeuKs

OA系统单点登录

2. 输入统一认证用户名和密码,会进入OA系统


提示

登录成功之后,进入的是OA系统的页面

OA系统单点登录

# 应用系统集成--普通BS应用系统


提示

该章节介绍的是普通BS应用系统使用OAuth2协议对接的流程接入样例;如果是HOS基础平台下开发的应用,参考上一章【应用系统集成--基于hos组织权限平台框架开发的系统】节接入。 下面以OA系统为例,介绍接入OAuth2的过程;实际接入中,改为实际的ip地址。
统一认证配置访问地址:http://114.251.235.9:8328;
统一认证服务前端ip和端口地址:http://114.251.235.9:8344;
OA应用的前端地址:http://114.251.235.9:8334;
本文档以此端口+ip为例,搭建项目根据实际情况进行修改

# 第一步,注册系统

统一认证配置访问地址:http://114.251.235.4:8228

接下来以OA系统为例,在统一认证配置平台,配置OA系统;

1.1 新增应用系统,OA系统

2. 进入【应用中心】->【应用管理】

应用系统注册

B/S系统注册

2.1 配置认证基本信息;

注册成功应用系统后,选择应用进入应用详情页面

统一认证配置-基础配置

2.2 配置应用系统认证信息


提示

回调地址(redirect_uri)接收授权码的地址,可以配置多个,使用间隔符“,”,是OAuth2接入流程中,OA系统接收授权码和state参数用到;后续的操作中关键参数之一。
单点退出(logout_uri):开关,控制是否进行统一认证退出,打开后,需要配置登出地址。
授权模式(response_type):目前只支持授权码模式,如果需要返回刷新token,需要同时选中授权码模式和刷新token
作用域(scope):访问权限类型,固定写all


选择应用功能--->认证管理,配置OA系统的回调地址,默认配置一样

回调地址配置

2.3 配置OAuth2参数


提示

客户端id(client_id)和客户端秘钥(client_secret),是自动生成的两个参数,这两个参数是后续调用接口操作中的关键参数。

应用系统注册-OAuth参数配置

2.4 下一步需要用到的参数


提示

客户端id(client_id):messaging-client
客户端秘钥(client_secret):secret
回调地址(redirect_uri):http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc

# 第二步,获取授权码


提示

以下面的ip和端口为例介绍配置,实际地址需要根据项目实际环境来修改。
统一认证ip和端口地址:http://114.251.235.9:8344;
OA应用的前端地址:http://114.251.235.9:8334;
需要用到的第一步注册的参数说明:
客户端ID(client-id): messaging-client #第一步注册应用时,生成的客户端ID
客户端秘钥(client-secret): secret #第一步注册应用时,生成的客户端秘钥
回调地址(redirect_uri):http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc

1. 浏览器输入OA系统链接


提示

OA系统的链接:该链接可以是OA系统的任意链接,比如http://114.251.235.9:8334/base-sys-resources。
OA系统需要记录【初始访问链接】,作用是在最后一个流程,完成登录之后,跳转回【初始访问链接】。
OA系统分未登录和已登录存在两种情况:
OA系统未登录:浏览器不存在有效的OA系统会话信息(没有OA系统session或者session信息过期)。
OA系统已登录:浏览器存在有效的OA系统会话。

1.1 未登录

需要OA系统前端拼接获取授权码的链接地址,并前端重定向到该地址,去统一认证服务器请求授权码。 下面地址是重定向的地址:

    http://114.251.235.9:8344/oauth/authorize?response_type=code&client_id=messaging-client&scope=openid%20profile&state=nh_oqeWEtXAwKqbYusbLJHyNoEmIFHHINzN9vGBWzgM%3D&redirect_uri=http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc
地址/参数 说明
统一认证地址 http://114.251.235.9:8344/oauth/authorize 统一认证前端地址
response_type code 必要参数;值为code,固定参数;
client_id messaging-client 必要参数;第一步注册所得;
redirect_uri http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc 必要参数;回调地址,必须在第一步注册时配置上;
state nh_oqeWEtXAwKqbYusbLJHyNoEmIFHHINzN9vGBWzgM%3D 这个值是随机值,作用是安全校验;下次地址为跳转到的回调地址时,原值参数返回回来
scope all 访问权限

集成接口介绍--授权接口详细介绍

OA系统拼接好统一认证授权链接,然后重定向到上述链接,并重定向到之后,在下面【2. 请求授权码】继续说明。

1.2 已登录


提示

OA系统可正常进入自己的系统页面,这种场景不需要统一认证后续操作。如果OA系统会话过期或失效,需要继续执行【1.1 未登录】的流程。

2. 请求授权码


提示

上面【1.1 未登录】场景重定向的链接,是请求授权码地址。
获取授权码,需要统一认证系统是登录状态。
统一认证系统分未登录和已登录存在两种情况:
统一认证系统未登录:浏览器不存在有效的统一认证系统登录状态信息。
统一认证系统已登录:浏览器存在有效的统一认证系统登录状态信息。

2.1 统一认证未登录

2.1.1 访问链接:

    http://114.251.235.9:8344/oauth/authorize?response_type=code&client_id=messaging-client&scope=openid%20profile&state=nh_oqeWEtXAwKqbYusbLJHyNoEmIFHHINzN9vGBWzgM%3D&redirect_uri=http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc

2.1.2 跳转到统一认证登录页进行登录:

   http://114.251.235.9:8344/login/login?redirect=%2Foauth%2Fauthorize%3Fresponse_type%3Dcode%26client_id%3Dmessaging-client%26scope%3Dopenid%2520profile%26state%3DCIc6FhR5uo3yX5OE3m339x1nlUH0C_ZDHPp5o3SHFgY%253D%26redirect_uri%3Dhttp%253A%252F%252F114.251.235.9%253A8334%252Fapi%252Fsecurity%252Flogin%252Foauth2%252Fcode%252Fmessaging-client-oidc

OA使用统一认证登录页面


提示

进行登录,登录成功后,跳转回2.1.1 访问链接,进入【2.2 统一认证已登录】流程

2.2 统一认证已登录

访问链接:

    http://114.251.235.9:8344/oauth/authorize?response_type=code&client_id=messaging-client&scope=openid%20profile&state=nh_oqeWEtXAwKqbYusbLJHyNoEmIFHHINzN9vGBWzgM%3D&redirect_uri=http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc&nonce=O5TtmUg8lNKg_vpICq7pbidTOQKldPm6uuKbTZtwEOw

提示

访问链接的参数, 客户端ID(client_id)、回调地址(redirect_uri)必须是之前注册OA系统时注册的,如果不是的话,会提示错误,不会进入回调地址。

正常跳转到:

    http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc?code=eVWUVSVPLWFtijZj25721nI66FYAJYl9Oyo5JFAMSp5yRTl46sPwd-XH89Ossc3pOM9dTCSHEBXgsbJ-7sYfN-1o4hOi3pd1GT0BwUAilE0hHYLwZ5bF1mzJSGScc2Ir&state=TAOZK8d2XmTcjkSM8pW5U0ddwow8_prfRI_m8s4RfNM%3D

提示

跳转到上述地址(http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc?code=eVWUVSVPLWFtijZj25721nI66FYAJYl9Oyo5JFAMSp5yRTl46sPwd-XH89Ossc3pOM9dTCSHEBXgsbJ-7sYfN-1o4hOi3pd1GT0BwUAilE0hHYLwZ5bF1mzJSGScc2Ir&state=TAOZK8d2XmTcjkSM8pW5U0ddwow8_prfRI_m8s4RfNM%3D) 进入下一步流程【3. 接收授权码和state】

异常情况链接:

    http://114.251.235.9:8344/oauth/authorize?response_type=code&client_id=messaging-client&scope=openid%20profile&state=nh_oqeWEtXAwKqbYusbLJHyNoEmIFHHINzN9vGBWzgM%3D&redirect_uri=http://114.251.235.9:8334/api/security/login/oauth2/code/messaging-client-oidc

提示

异常情况会出现如下类似错误提示,且不能重定向到回调地址链接

异常情况链接

3. 接收授权码和state OA系统根据回调的链接,接收到code和state参数 3.1 首先处理接收到的state参数


提示

state参数是在【1. 浏览器输入OA系统链接】的流程中,OA系统自己生成的一个随机串放入统一认证请求授权码的链接当中。
state参数是随着回调地址,跟获取到的授权码一起传回OA系统的,作用是为了保护回调掉地址免遭攻击。
如果state参数跟之前的不一致,OA系统就不要进行下一步【第三步,根据授权码获取token】操作。


3.2 处理接收到的code参数 前端页面接收到授权码(code)参数,传入后端进入下一步【第三步,根据授权码获取token】操作

# 第三步,OA系统根据授权码获取token


获取token

根据回调地址携带的授权码,获取token信息;为了安全考虑,后台调用获取token接口。
该接口是post接口。

统一认证后端获取token,请求类型是POST,请求时需要设置请求头信息,包含参数Username:应用id,Password:应用秘钥 接口地址:

  http://114.251.235.9:8384/api/security/oauth2/token

需要传入的参数说明:

参数 说明
client_id client_id 第一步注册获得
client_secret client_secret 第一步注册获得(不能泄露)
redirect_uri redirect_uri 回调地址,这个本身就是应用系统提供的固定地址
grant_type grant_type 固定参数 authorization_code
code code 授权码值

集成接口介绍--授权token接口详细介绍


成功结果:


{
    "code": "200",
    "msg": "成功",
    "data": {
    "access_token": "eyJraWQiOiIwMWQ5Yjg0Zi0zN2QyLTQ1ODgtOGE5My1mYjZkMmI3MGE0YjYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IjE0MG05QndlYjBhODdhMyIsIm5iZiI6MTY5NDE0ODg3NSwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSJdLCJpc3MiOiJodHRwOi8vMTE0LjI1MS4yMzUuOTo4MzQ0L2FwaSIsImV4cCI6MTY5NDE3NzY3NSwiaWF0IjoxNjk0MTQ4ODc1fQ.CMafcbaKDj5dAM_6aXH2rJ6xZoAGSvlG5-fnbcPMAEQrl2yXo-ICqz9PyiAjgpOHbfe1hATivzR_-FNNF71Z-GartP-2mUXBOKQ3AnKb-DE4ShNNJ9aOct6ljgpI38x75J6Up3ZYPgXCwvBX-n59lczKTfSPscODnfaX8oIPBVfXvODgJgeYossXLnZpCtAkO7fc7QGXMsUOoIX1rljKZbpundU2_Uh4BjLj8ef-jkYW8NzZGM4luIJI7lHRKKfgH8nLTXQ378m_HNJC9DmrVMn2SGMh9lcXOSp976fiygxVSNWy6oCV0vbQFQPBnXe4d2Y0kIUE1ZND0Mw4Z-hUkw",
    "refresh_token": "5-tyWCkCHJEM3mWOhEG59gZPrdITcIEqUEVClG4QR-E2WAxgBsgYkcdi7EgPU_OS7o6DCenfurN-PMZzY0it0MsE3T8iIqbprjdWamTVAy-oTg97E6d4zduqw-yYunw3",
    "code": "EZNGjWZ_lQUaxsiooiWZKJmGfBsSu2HNpmFxUYWHwb4IcKPS_-dHHiEyyxike5K0jIhexSToOu2yA29Dan-i-Us8SlkWtH4dSKrFIOFenml5h-6NtFNNi63wTPo5pwnY",
    "scope": "openid profile",
    "token_type": "Bearer",
    "expires_in": 28800,
    "client_id": "140m9Bweb0a87a3"
    },
    "uri": null
}

提示

成功获取到token信息之后,OA系统可以把token信息保存起来,不能泄露。携带token请求【#### 第四步,OA系统根据token获取登录用户信息】

# 第四步,OA系统根据访问令牌获取用户信息


获取token

根据access_token,获取登录用户信息
该接口是post接口。

该接口的认证方式为Bearer Token。调用该接口时需要2.2.3中的access_token拼接到请求header中。Bearer加空格加access_token,接口地址:

  http://114.251.235.9:8384/api/security/oauth2/user/info

需要传入的参数说明:

参数 说明
access_token access_token值 token接口返回的access_token值

成功结果:

{
	"code": "200",
	"msg": "成功",
	"data": {
		"accountCode": "admin",
		"accountId": "42ba0988866e43e9a3086ef19ebe6806",
		"accountName": "超级管理员",
		"userName": "超级管理员"
	}
}

集成接口介绍--获取认证用户接口详细介绍


提示

OA系统获取用户信息成功。根据accountCode字段中的用户名,完成创建自己的会话信息等操作,完成登录。

# 第五步,完成登录

1. 根据获取到的用户信息,创建登录需要的会话等,完成登录操作

2. 登录完成重定向到首页或者初始访问链接(如果记录了初始链接)


提示

在【第二步,获取授权码】--【1. 浏览器输入OA系统链接】中,如果OA系统有记录【初始访问链接】,在本次认证完成时候,可以跳转回到【初始访问链接】,
如果未记录初始访问链接,只能去跳转回默认首页页面。
这个逻辑需要OA系统自己处理。
登录成功之后,进入OA系统页面。

登录进入OA系统

# 集成接口介绍

本节介绍的是,统一认证集成过程中,用到的接口详细说明

# 一、授权接口

  1. 基本信息
    名称 描述
    地址 http://{统一认证前端ip和端口}/oauth/authorize
    接口名称 获取授权码
    请求类型 GET
  2. 请求示例
http://{统一认证前端ip和端口}/oauth/authorize?response_type=code&client_id=G5Jh27LXXdRf&redirect_uri={应用系统回调地址}&state={应用系统提供的随机码}
  1. 参数说明

    参数 中文说明 描述
    response_type 响应类型 code
    client_id 客户端ID(应用标识) 统一认证配置注册的客户端ID(应用标识)
    scope 作用域 在统一用户的认证管理页面配置的作用域
    redirect_uri 回调地址 跳转到应用系统的地址,会携带授权码(code参数值)和状态码(state参数值)
    state 任意值 用于保持请求和回调的状态,在回调时,会在Query Parameter中回传该参数。开发者可以用这个参数验证请求有效性,也可以记录用户请求授权页前的位置。这个参数可用于防止跨站请求伪造(CSRF)攻击
  2. 处理逻辑.

    1. 验证client_id是否有效
    2. 校验redirect_uri是否有效;统一认证配置中,可配置多个redirect_uri地址(以“,”分隔),用逗号分隔。
    3. 校验scope;统一认证配置中,可配置多个(以“,”分隔),用逗号分隔。
    4. 校验成功后,页面跳转至redirect_uri并附有授权码和state参数(这个是应用系统请求是携带的原值)
  3. 返回值

    1. 参数正确登录成功时,会跳转到http://{应用系统回调地址}?code={授权码}&state={XXX}
    2. client_id错误
 {
     "code": "102-001-001-002",
     "msg": "无效的应用",
     "data": null,
     "uri": null
 }
  1. redirect_uri无效
{
    "code": "102-001-001-011",
    "msg": "redirectUri错误",
    "data": null,
    "uri": null
}

  1. scope错误
  {
      "code": "102-001-001-015",
      "msg": "客户端不支持Scopes",
      "data": null,
      "uri": null
  }
  1. 描述
    1. 此接口是浏览器redirect跳转方式调用。
    2. 如果用户已完成过登录,访问此地址则会直接跳转到指定的回调地址,带上code。如果请求参数中传入了state,这里会带上原始的state值。
    3. 如果用户未登录,访问此地址会跳转至登录页面,显示应用配置的认证方式,用户完成登录后跳转到指定的回调地址,带上code。如果请求参数中传入了state,这里会带上原始的state值。

# 二、获取token

  1. 基本信息
    名称 描述
    地址 http://{统一认证后端ip和端口}/api/oauth2/token
    接口名称 获取token
    请求类型 POST
  2. 请求示例
http://{统一认证后端ip和端口}/api/oauth2/token

获取token接口 获取token接口的authorization

  1. 参数说明

    参数 中文说明 描述
    client_id 客户端ID(应用标识) 统一认证配置注册的客户端ID(应用标识)
    client_secret 客户端秘钥 统一认证配置注册的客户端秘钥
    code 授权码 回调地址接收到的code参数值
    redirect_uri 回调地址 请求授权码时的回调地址
    grant_type 认证方式 请求类型,默认authorization_code
  2. 处理逻辑

    1. 验证client_id是否有效
    2. 验证client_secret是否有效
    3. 验证redirect_uri是否是请求授权码的地址
    4. 验证code是否有效
    5. 根据以上判断、验证及认证结果返回JSON数据
  3. 返回值

    1. 正确返回时
{
    "code": "200",
    "msg": "成功",
    "data": {
    "access_token": "eyJraWQiOiIwMWQ5Yjg0Zi0zN2QyLTQ1ODgtOGE5My1mYjZkMmI3MGE0YjYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IjE0MG05QndlYjBhODdhMyIsIm5iZiI6MTY5NDE0ODg3NSwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSJdLCJpc3MiOiJodHRwOi8vMTE0LjI1MS4yMzUuOTo4MzQ0L2FwaSIsImV4cCI6MTY5NDE3NzY3NSwiaWF0IjoxNjk0MTQ4ODc1fQ.CMafcbaKDj5dAM_6aXH2rJ6xZoAGSvlG5-fnbcPMAEQrl2yXo-ICqz9PyiAjgpOHbfe1hATivzR_-FNNF71Z-GartP-2mUXBOKQ3AnKb-DE4ShNNJ9aOct6ljgpI38x75J6Up3ZYPgXCwvBX-n59lczKTfSPscODnfaX8oIPBVfXvODgJgeYossXLnZpCtAkO7fc7QGXMsUOoIX1rljKZbpundU2_Uh4BjLj8ef-jkYW8NzZGM4luIJI7lHRKKfgH8nLTXQ378m_HNJC9DmrVMn2SGMh9lcXOSp976fiygxVSNWy6oCV0vbQFQPBnXe4d2Y0kIUE1ZND0Mw4Z-hUkw",
    "refresh_token": "5-tyWCkCHJEM3mWOhEG59gZPrdITcIEqUEVClG4QR-E2WAxgBsgYkcdi7EgPU_OS7o6DCenfurN-PMZzY0it0MsE3T8iIqbprjdWamTVAy-oTg97E6d4zduqw-yYunw3",
    "code": "EZNGjWZ_lQUaxsiooiWZKJmGfBsSu2HNpmFxUYWHwb4IcKPS_-dHHiEyyxike5K0jIhexSToOu2yA29Dan-i-Us8SlkWtH4dSKrFIOFenml5h-6NtFNNi63wTPo5pwnY",
    "scope": "openid profile",
    "token_type": "Bearer",
    "expires_in": 28800,
    "client_id": "140m9Bweb0a87a3"
    },
    "uri": null
}
  1. client_id无效
{
    "code": "102-001-001-002",
    "msg": "无效的应用",
    "data": null,
    "uri": null
}
  1. client_secret无效
{
    "code": "102-001-001-005",
    "msg": "客户端认证信息错误",
    "data": null,
    "uri": null
}
  1. 授权码无效
{
    "code": "102-001-001-007",
    "msg": "授权码失效",
    "data": null,
    "uri": null
}
  1. 回调地址无效
{
    "code": "102-001-001-011",
    "msg": "redirectUri错误",
    "data": null,
    "uri": null
}

# 三、刷新token

  1. 基本信息
    名称 描述
    地址 http://{统一认证后端ip和端口}/api/oauth2/token
    接口名称 刷新token
    请求类型 POST
  2. 请求示例
http://{统一认证后端ip和端口}/api/oauth2/token

获取刷新token接口 获取刷新token接口的的authorization 3. 参数说明

参数 中文说明 描述
Username 客户端ID(应用标识) 统一认证配置注册的客户端ID(应用标识)
Password 客户端秘钥 统一认证配置注册的客户端秘钥
refresh_token 刷新token 刷新token
grant_type 认证方式 请求类型,默认refresh_token
  1. 处理逻辑
    1. 验证Username是否有效
    2. 验证Password是否有效
    3. 根据refresh_token生成token
    4. 根据以上判断、验证及认证结果返回JSON数据
  2. 返回值
    1. 正确返回时
{
    "code": "200",
    "msg": "成功",
    "data": {
    "access_token": "eyJraWQiOiIwMWQ5Yjg0Zi0zN2QyLTQ1ODgtOGE5My1mYjZkMmI3MGE0YjYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IjE0MG05QndlYjBhODdhMyIsIm5iZiI6MTY5NDE0ODg3NSwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSJdLCJpc3MiOiJodHRwOi8vMTE0LjI1MS4yMzUuOTo4MzQ0L2FwaSIsImV4cCI6MTY5NDE3NzY3NSwiaWF0IjoxNjk0MTQ4ODc1fQ.CMafcbaKDj5dAM_6aXH2rJ6xZoAGSvlG5-fnbcPMAEQrl2yXo-ICqz9PyiAjgpOHbfe1hATivzR_-FNNF71Z-GartP-2mUXBOKQ3AnKb-DE4ShNNJ9aOct6ljgpI38x75J6Up3ZYPgXCwvBX-n59lczKTfSPscODnfaX8oIPBVfXvODgJgeYossXLnZpCtAkO7fc7QGXMsUOoIX1rljKZbpundU2_Uh4BjLj8ef-jkYW8NzZGM4luIJI7lHRKKfgH8nLTXQ378m_HNJC9DmrVMn2SGMh9lcXOSp976fiygxVSNWy6oCV0vbQFQPBnXe4d2Y0kIUE1ZND0Mw4Z-hUkw",
    "refresh_token": "5-tyWCkCHJEM3mWOhEG59gZPrdITcIEqUEVClG4QR-E2WAxgBsgYkcdi7EgPU_OS7o6DCenfurN-PMZzY0it0MsE3T8iIqbprjdWamTVAy-oTg97E6d4zduqw-yYunw3",
    "code": "EZNGjWZ_lQUaxsiooiWZKJmGfBsSu2HNpmFxUYWHwb4IcKPS_-dHHiEyyxike5K0jIhexSToOu2yA29Dan-i-Us8SlkWtH4dSKrFIOFenml5h-6NtFNNi63wTPo5pwnY",
    "scope": "openid profile",
    "token_type": "Bearer",
    "expires_in": 28800,
    "client_id": "140m9Bweb0a87a3"
    },
    "uri": null
}

# 四、获取认证用户

  1. 基本信息
    名称 描述
    地址 http://{统一认证后端ip和端口}/api/security/oauth2/user/info
    接口名称 获取认证用户信息
    请求头 Authorization=Bearer
    请求类型 POST
  2. 请求示例
   http://{统一认证后端ip和端口}/api/security/oauth2/user/info

获取认证用户接口 3. 参数说明 | 参数 | 中文说明 | 描述 | | access_token | token | 访问令牌 | 4. 处理逻辑

  1. 验证access_token是否有效
  2. 根据以上判断、验证及认证结果返回JSON数据
  3. 返回值
    1. 正确返回时
{
	"code": "200",
	"msg": "成功",
	"data": {
		"accountCode": "admin",
		"accountId": "42ba0988866e43e9a3086ef19ebe6806",
		"accountName": "超级管理员",
		"userName": "超级管理员"
	}
}

# 单点退出

# 单点退出接口

  1. 基本信息

    业务系统需要支持单点退出功能时,需要提供一个单点退出接口。

  2. 详细说明

    当业务系统需要使用统一认证服务的单点退出功能时,需要将认证时,统一认证返回的access_token参数与自己的session进行绑定, 当从统一认证服务进行退出操作时,统一认证服务会查询该用户所在的所有应用是否支持单点退出配置。统一认证服务会挨个调用支持单点 退出系统配置的退出接口,将登录名和access_token作为参数传递,业务系统接收到后,需要根据access_token参数将自身对应的session 清除

  3. 接口详情

名称 描述
接口名称 单点退出
接口所属 业务系统
请求类型 GET
  1. 参数说明
参数 中文说明 描述
access_token 统一认证访问token 业务系统通过该token在自己系统进行退出操作
  1. 接口配置

应用中心-->应用管理-->选择应用-->认证管理

signOut.png

  1. 接口返回
{
   "code": "200",
   "msg": "success"
}

# 其他配置

# 集群需修改配置

# 1. 缓存修改为redis方式存储

1.1 配置redis地址

spring:
  redis:
    # redis密码
    password:
    # redis数据库编号
    database: 0
    timeout: 5000
    # 缓存库地址,单机模式下使用
    host: 127.0.0.1
    # redis端口
    port: 6379
    # redis集群下使用
    #cluster:
      #nodes: 114.242.246.250:7001,114.242.246.250:7002,114.242.246.250:7003,114.242.246.250:7004,114.242.246.250:7005,114.242.246.250:7006

# 强制启用单体登录

当应用系统对接统一认证系统之后,统一认证有可能会宕机。当这种情况发生时,应用系统应提供应急预案。

# 1. 基于HOS框架开发的应用

当遇到上述情况时,只需要访问 {应用系统ip+端口}?ifDowntime=true 即可实现强制使用应用自身登录方式登录。

# 2. 其他应用

其他应用应自行实现应急预案。