帮助中心 帮助中心
  • 产品介绍

  • 购买指南

  • 快速入门

  • 租户管理员操作指南

  • 普通用户操作指南

  • 常见问题

  • 应用集成

    • 自建应用

      • CAS协议单点登录开发文档
      • OAuth2.0协议单点登录开发文档
      • OIDC协议单点登录开发文档
      • SAML协议单点登录开发文档
    • 集成应用

OIDC协议单点登录开发文档

# OIDC协议单点登录开发文档

# 一、 OIDC协议授权码模式交互流程

image-20220914141654325

步骤说明:

  1. 用户通过浏览器访问资源应用。
  2. 应用判断当前未登录重定向至SSO,发起Oidc授权发起接口(/authorize接口)。
  3. 浏览器收到请求后,转发Oidc授权Request给SSO。
  4. 用户在SSO推送的登录页面中输入用户名和密码,SSO对用户提供的身份信息进行验证,并构建授权code的响应,重定向至资源应用的回调地址。
  5. 浏览器响应后转发Oidc授权code给资源应用。
  6. 资源应用内部使用授权code调用SSO颁发token接口。
  7. SSO返回token给资源应用。
  8. 资源应用内部使用token调用SSO用户信息接口。
  9. SSO返回用户信息给资源应用。

# 二、 认证接口

# 1. 获取公钥

# 1.1 接口描述

获取公钥串,用于IDToken的校验;

# 1.2 请求路径

/api/sso/protocol/oidc/jwks

# 1.3 HTTP请求方法

GET

# 1.4 请求参数

参数 参数类型 参数值 参数描述

# 1.5 返回字段

参数 参数类型 参数值 参数描述
kty String RSA 密钥使用的加密算法
kid String 用于匹配密钥,主要在JWK集合中选择jwk
use String sig 公钥的使用目的
alg String 标识密钥的算法
n String 公钥的模值
e String 公钥的指数

# 1.6 接口示例

调用参数:/api/sso/protocol/oidc/jwks

成功返回:

{
    "keys": [
        {
            "kty": "RSA",
            "kid": "6919612419616771",
            "use": "sig",
            "alg": "RS256",
            "n": "q8wpJW3_JyvGDp3yaEvMt_Al1tknoGFAXdj4R6tBMNUzBC1q9-a91_YEdnPxLZ-1IoN9EAe9vwGz4JF6wvdQZxPgHg6Iwczbzjvh65WG_ltf7BkwJWtwpDir5nLKLzQaEqyETbCtltiVBM3SmbiX-cMgVJyOch5xYdeTN2qVY-HIC6VZEfpq6GVslMhK2Br-8KDZ582vAnhwcJg68QVNQZe-8Pw-MXNYYWlf2EC93CyQ7-V8jyXuNcaQbulL0V5_bXBmi7sfFWlQbqOSQsGZJSKVNHWBJ_QFFMMCxiNkcXJSVqaBJ8v-GgICi8eSw6H1muYG5t_1FXkNgNyP97OPSQ",
            "e": "AQAB"
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12

**失败返回:**无

# 2. 请求授权

# 2.1 接口描述

发起认证授权请求

# 2.2 请求路径

/api/sso/protocol/oidc/authorize

# 2.3 HTTP请求方法

GET

# 2.4 请求参数

参数 参数类型 参数值 参数描述
client_id String IDP分配给应用的客户端ID
response_type 返回值类型,授权码模式为code,隐含模式为token
redirect_uri 应用回调地址

# 2.5 返回字段

302重定向

# 2.6 接口示例

调用参数:/api/sso/protocol/oidc/authorize

成功返回:

//302重定向
http://app/demo/callback?code=OC-160-GoFhTmaYT2nfffHq6LtDPwnPFf5O4YBYPCb
1
2

失败返回

    The client_id error.
1

# 3. 获取Token

# 3.1 接口描述

获取ID Token

# 3.2 请求路径

api/sso/protocol/oidc/token

# 3.3 HTTP请求方法

POST

# 3.4 请求参数

    1. 授权码模式:
grant_type=authorization_code&client_id=xxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxx&code=OC-1-xxxxxxxxxxxxxxx&redirect_uri=http://
[www.demo.com/callback](http://www.demo.com/callback)
1
2
    1. password模式:
grant_type=password&username=zhangsan&password=123456&client_id=xxxxxxxxxx
1
    1. 刷新Token模式:
grant_type=refresh_token&client_id=xxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&refresh_token=RT-10-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1
    1. 客户端模式:
grant_type=client_credentials&client_id=xxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx
1
参数 参数类型 参数值 参数描述
grant_type String 授权类型(authorization_code,client_credentials,refresh_token,password)
client_id String 客户端ID
client_secret String 客户端密钥
code String 授权code
redirect_uri String 回调地址
username String 用户名
password String 密码
refresh_token String 刷新Token

# 3.5 返回字段

参数 参数类型 参数值 参数描述
access_token String
token_type String
expires_in number
refresh_token String 刷新Token,需要Idaas配置应用时开启

# 3.6 接口示例

调用参数:/api/sso/protocol/oidc/token

成功返回:

{
  "access_token": "AT-499-zKcb2TbfKiwdxnkkg17dO9LTT6u0OdcMPZQ",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "RT-499-kHMbfoRsm2fXfGx3wVD5zmNa4MrB5TzXoQ5",
  "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjY5MTk2MTI0MTk2MTY3NzEifQ.eyJqdGkiOiI0M2IyZGZhYS01NTFjLTRjMDQtYjc5OS1lMGM1ZGE5YjIxMDUiLCJpc3MiOiJodHRwczovL2lkYWFzLXRlc3QtMDEuc3NvMzYwLmNuL2FwaS9zc28iLCJhdWQiOiJVemRKNzJzek5xOU5MczEwODgxYlB5NWdtTjI1MTdKelUzMDEiLCJleHAiOjE2NjMwMzg2MTgsImlhdCI6MTY2MzAzNTAxOCwibmJmIjoxNjYzMDM0NzE4LCJzdWIiOiJ0YW5nbCIsImF1dGhUeXBlIjoiUFdEIiwic2NoZW1hIjoiQVVUSE9SSVpBVElPTl9DT0RFIiwib3NrIjoiMGU5YTE5YmEzODI0ZDJjZmRmMjRiMTc1NDIwNWYzMGMiLCJzdGF0ZSI6bnVsbCwibm9uY2UiOm51bGwsImF0X2hhc2giOiJ2d1NkOTloeWFFWlh2aGRFT3VPN1Z3PT0iLCJ1aWQiOiI2OTMyNzYzNzU2MjAyNzAzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoidGFuZ2wifQ.ccoDAmuAktMffqi7JH-AArsxxJvn97KgIDY8kAL90XZm_50yUQjlF_d01I27NhNUTQYjyL3MOAvbGHE5KnopwX3vFnOrVr1h_wwBb4yyPmHdbGXFTHq15Qq_bR0XgF3FRG7x2Ig7IYoKtcbLNiv99VG3gSaaMZvBsLHWswEsaRGD4UV0tQk8jZu_ih8KSak9ogVvXI2Bsres1j1ssbpd5HCuX0THOgbMt_LUeDG21C5wRfQGF5SBrqV5Wn_0rcFdiLXnrX4b7au_Ei0Wl14o8faqcu-PPq6jT8P-os7VFj7BH7pAiD40xHvM2cQZGI9IF4r2EfpCdgqDrRc-WueFJw"
}
1
2
3
4
5
6
7

失败返回:

    1. 授权码模式:
error=invalid_grant
1
    1. password模式:
{
    "code": "IDS0161002",
    "msg": "账号或密码错误,还剩3次机会,登录失败5次后账号将锁定30分钟"
}
1
2
3
4
    1. 刷新Token模式:
error=invalid_grant
1
    1. 客户端模式:
{
    "timestamp": 1662636170951,
    "status": 401,
    "error": "Unauthorized",
    "message": "",
    "path": "/protocol/oidc/accessToken"
}
1
2
3
4
5
6
7

# 4. 获取用户信息

# 4.1 接口描述

获取用户信息

# 4.2 请求路径

api/sso/protocol/oidc/profile

# 4.3 HTTP请求方法

GET

# 4.4 请求参数

参数 参数类型 参数值 参数描述
access_token String 获取token接口返回的access token

# 4.5 返回字段

参数 参数类型 参数值 参数描述
sub String 用户名
username String 用户名(可在认证属性中配置其他属性)
auth_time number 认证时间

# 4.6 接口示例

调用参数:/api/sso/protocol/oidc/profile

成功返回:

{
    "sub": "sysadmin",
    "username": "sysadmin",
    "auth_time": 1663035777
}
1
2
3
4
5

失败返回:

{
    "error": [
        "expired_accessToken"
    ]
}
1
2
3
4
5

# 三、应用配置演示

# 1. IDaaS平台应用配置

管理员账号登录IDaaS,进入【后台管理】-->【应用管理】-->【新增应用】-->【创建并添加应用】

img

【应用属性】标签的【应用地址】填写应用的地址,打开【启用】的开关,如果该应用需要二次认证,可以勾选【登陆应用二次认证】,点击【确认】,保存配置

img

【协议配置】标签,【认证模式】选择【OIDC】,此时会自动生成基本信息,可以根据需求做出调整。client_id,client_secret会在步骤二中使用

img

【登录回调地址】需要跟应用平台确认,【登出回调地址】如果应用平台有对应的功能,可以配置,否则,可以随意配置

img

【认证属性】需要根据应用平台的要求做出选择,常用属性为【用户名】、【邮箱】、【手机号】,勾选需要的属性。属性名可以做映射,即应用属性名可以修改为应用平台的属性名,例如用户名在IDaaS的属性名为username,在应用平台为userName,那么可以在用户名对应的应用属性名一栏填入userName,完成映射。点击【确定】,保存配置

img

# 2. 应用平台配置

此步与应用平台息息相关,需要参考应用平台的配置说明。配置方法大相径庭,但主要目的一致:

  • 配置client_id、client_secret

  • 配置授权(authorize)、认证(token)、用户信息(profile)端点

# 3. 分配应用权限

【用户服务管理】-->【用户管理】,找到需要分配应用的用户,【查看详情】

img

【应用信息】标签,【添加应用】

img

勾选刚刚配置的应用,【确定】

img

# 4. 单点登录

登录分配了应用权限的账号,点击应用

img

跳转成功

img

上次更新: 2022/09/28, 11:00:16
OAuth2.0协议单点登录开发文档
SAML协议单点登录开发文档
上海派拉软件技术有限公司 Copyright © 2022 Paraview Software 沪ICP备18009452号 隐私政策