OIDC协议
流程如下:
- 在你的应用中,让用户访问登录链接,浏览器跳转到 平台,用户在 平台 完成认证 。
- 浏览器接收到一个从 平台 服务器发来的授权码 。
- 浏览器通过重定向将授权码 发送到你的应用前端 。
- 你的应用将授权码 和校验码 发送到 平台 获取 AccessToken 和 IdToken ,如果需要,还会返回 Refresh token。
- 你的应用前端现在知道了用户的身份,后续使用 Access token 换取用户信息,重定向到前端其他页面,使用 AccessToken 调用资源方的其他 API 等等。
流程图:

1. 平台配置
1.1. OIDC协议配置并启用
右上角点击"进入后台",进入后台配置页面。在后台配置左侧导航栏中,点击"单点登录",进入单点登录配置页面。

点击"新增单点登录"按钮,进入OIDC认证配置页面,如下图:

配置完成后,点击下方保存按钮,保存配置信息。
1.2. 使用OIDC单点登录
配置OIDC单点登录后,平台首页单点登录组件中,可查到到上一步所配置单点登录。
点击对应单点登录中的logo。系统生成授权码,回调到应用回调地址。

2. 应用方
2.1. 提供回调地址(支持页面或接口)。平台生成授权码后,会携带授权码重定向到应用回调地址。

2.2. 第三方应用获取到授权码,通过授权码请求平台接口获取token
接口 Request(GET/POST):http://{ip:port}/{appcode}/oauth2/token 请求实体

返回结果(JSON结构):
示例:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiZW1haWwiXSwiYWN0aXZlIjp0cnVlLCJleHAiOjE3MTcyMjgyNjAsImp0aSI6ImI2ZDZkN2I0LTJkM2ItNDgxZS1hYThmLWYzOGViYWJlZmE2OCIsImNsaWVudF9pZCI6InRlc3RDbGllbnQiLCJzdWIiOiJhZG1pbmlzdHJhdG9yIn0.G4HwAQvT5VZ3pQ0HS_C5VmlAQ9ViHVEstrUanwsfLRD3EBqUWmF1IwOmUl8FDoRD6wJMjr_pXdIkjWhgf2CvLw",
"token_type": "bearer",
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiZW1haWwiXSwiYWN0aXZlIjp0cnVlLCJleHAiOjE3MTcyMzE4NjAsImp0aSI6ImNiOWM2MTRlLTdmN2YtNDEyZi1hNmQ3LTE0MjNmOTMyNzg3NSIsImNsaWVudF9pZCI6InRlc3RDbGllbnQiLCJzdWIiOiJhZG1pbmlzdHJhdG9yIn0.OhGSatjCG38_vJRtxOuSFgWVEa8wHvXcYOsMCfQsLjup3o07QJTVhdfxBvtVq4Ru3_enYyJWqsoz6MkoiPiGEw",
"expires_in": 3599,
"scope": "openid profile email",
"jti": "b6d6d7b4-2d3b-481e-aa8f-f38ebabefa68",
"id_token": "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbmlzdHJhdG9yIiwiYXVkIjoidGVzdENsaWVudCIsImtpZCI6InRlc3RDbGllbnRfc2lnIiwiaXNzIjoiaHR0cHM6Ly8xOTIuMTY4LjMuNzIiLCJleHAiOjE3MTcyMjgyNjAsImlhdCI6MTcxNzIyNDY2MSwianRpIjoiODhjYmMyNWMtNTVhMy00OWIxLWE0NTUtYjlkNzRmZmQzMjU5In0.KPOnukrOGKncbrcSwRDgAJJCgI3RD7U37RZjb2q0dJXQkLygfSKS5JUqYdyZcL8PH0-YF4-IORPkIE0ZhAoqoND91FjOZk4uwKypyJsI6cDwozjpKBB3umH1KN1W3yIKYJrEGM-GtZwFxmSaQE8CVUVLWw9HZeB9BamXpXG3Tr6pJUetwAhqTMfKDYkxy5B_FkvtPqZrDRNRrBagXu6himWpyMEyl_VJ-PTZSCF06hBWuEzhYrZZqRmKEHTeGJZoaNfo1Youy0bMXgnGI-HZE7-VQJJlhvT9OzOy-E8a-9L4bkdkv_k-hUJPQ1BYCJ-5aAyvOMvyA1etX1HNSlDSRg"
}
2.3. 第三方应用获取到token获取用户信息。
2.3.1. 第三方应用获取到token,通过解码id_token来获取用户信息。
解码后示例:
{
"sub": "administrator",
"aud": "testClient",
"kid": "testClient_sgin",
"iss": "http://192.168.3.72",
"exp": 1717228260,
"iat": 1717224661,
"jti": "88cb325c-55a3-49b1-a455-b9d74ffda325"
}
2.3.2. 第三方应用获取到token,通过请求UserInfoEndpoint来获取用户信息。
接口 Request(GET/POST):http://{ip:port}/{appcode}/connect/v10/userinfo 请求实体

返回结果(JSON结构):
示例:
{
"sub": "administrator",
"email_verified": false,
"gender": "0",
"profile": "profile",
"userId": "18f923a7-5a5e-426d-94ae-a55ad1a4b239",
"picture": "picture",
"aud": "testClient",
"name": "系统管理员",
"exp": 1716891394,
"user": "administrator",
"iat": 1716887794,
"email": "",
"jti": "bfb4956e-076e-4c84-a9a5-e95ebaaedab6"
}