编写版本:v3.5.1
适用版本:v3.5.0+

IFORM登录服务实现原理

概述

本文档主要讲解用户登录和第三方集成商登录获取用户信息的过程。

IFORM用户登陆

获取登录状态码

简述:

  • 登陆,传入用户名密码

请求URL:

请求方式:

  • POST

请求参数:

  • Headers:

暂无

  • Query:

暂无

  • Body:
名称 类型 是否必须 默认值 备注 其他信息
username String 用户账号
password String 用户密码
captcha String 验证码
requestId String 请求ID

请求参数示例:

{
    "username": "anke",
    "password": "123456",# 跟实际需求是否加密
    "captcha": "",
    "requestId": ""
}

返回示例:

{
    "state": 200,
    "request": null,
    "message": "",
    "cause": "",
    "variables": {},
    "data": "616e7580f9fa11e906ee9dff8b7b5da8"
}

返回参数说明:

名称 类型 备注
data String 登录状态

注意:用户在前端输入用户名和密码,再加密后,传入后端。若校验成功,就返回具有三分钟时限的登录状态码

获取授权凭证

传入已授权过的子平台的相应信息AppKey,例如IFORM平台的AppKey为iform。即使用Appkey登录状态码申请授权凭证

注意::接口请求时,两参数分别是client_idlogin_state

简述

请求方式

  • POST

请求参数

  • Headers:
    暂无

  • Query:
    暂无

  • Body:

名称 类型 是否必须 默认值 备注 其他信息
login_state String 使用用户登录接口获取的状态值
client_id String 应用接入凭证
state String 3d896n 请求状态值,防篡改

请求参数示例

{
  "login_state":"b055cbf0f6bf11e9c2decb30b33a53a6",
  "client_id":"iform"
}

返回示例

{
  "state": 200,
  "request": null,
  "message": "",
  "cause": "",
  "variables": {
    "state": "3d896n"
  },
  "data": "cf5918e0f6bf11e9c2decb30b33a53a6"
}

返回参数说明

名称 类型 备注
data String 授权码

获取令牌

传入授权凭证AppKeyAppScret以及grant_type,获取access_tokenrefresh_token

AppKeyAppScret等相应信息加密后存储在前端。有关授权机制grant_type的讲解请看这里

简述:

  • 传入授权AppKey,申请access_token

请求URL:

请求方式:

  • POST

请求参数:

  • Headers:

暂无

  • Query:

暂无

  • Body:
名称 类型 是否必须 默认值 备注 其他信息
grant_type String 请求类型,可选值为:authorization_code/password_credentials/client_credentials/refresh_token
authorize_code String 调用authorize获得的code值,grant_type为authorization_code时必填
client_id String 申请应用时分配的AppKey
client_secret String 申请应用时分配的AppSecret
refresh_token String 调用access_token获得的refresh_token值,grant_type为refresh_token时必填
username String 用户名
password String 密码,grant_type为password_credentials时必填
redirect_uri String 回调地址

请求参数示例:

示例1:

{
    "client_id": "iform",
    "client_secret": "58b65297-3467-0859-8337-8cbaf81ef68a",
    "authorize_code": "6173f3c0f9fa11e906ee9dff8b7b5da8",
    "grant_type": "authorization_code"
}

示例2:

{
    "client_id": "iform",
    "client_secret": "58b65297-3467-0859-8337-8cbaf81ef68a",
    "grant_type": "client_credentials"
}

示例3:

{
    "client_id": "iform",
    "client_secret": "58b65297-3467-0859-8337-8cbaf81ef68a",
    "username": "iform",
    "password": "123456",
    "grant_type": "password_credentials"
}

示例4:根据刷新token值请求新token

{
    "refresh_token": "58b65297-3467-0859-8337-8cbaf81ef68a",
    "grant_type": "refresh_token"
}

返回示例:

结果1:

{
    "state": 200,
    "request": null,
    "message": "",
    "cause": "",
    "variables": {
        "code": "086670360d004dd78b681d602e50741d",# code凭证
        "redirect_uri": null
    },
    "data": {
        "access_token": "61797200f9fa11e906ee9dff8b7b5da8",
        "refresh_token": "61797201f9fa11e906ee9dff8b7b5da8",
        "primary_refresh_token": null,
        "uid": "626353848415420416",
        "publisher": null,
        "applicant": null,
        "expires_in": 28800,
        "remind_in": 259200
    }
}

返回参数说明:

名称 类型 备注
access_token String 系统令牌值,简称token
refresh_token String 用于刷新请求新token的刷新令牌
primary_refresh_token String
uid String 用户ID
publisher String
applicant String
expires_in Integer token的生命周期,单位秒
remind_in Integer refresh_token的生命周期,单位秒
code String 第三方获取用户信息的凭证
redirect_uri String 回调地址
  • 使用令牌获取相应权限的资源,前端显示相应的页面信息。

第三方集成商获取对应用户信息

IFORM平台目前不支持第三方平台获取IFORM用户全部信息,同时也无法获取用户权限调用资源,可获取部分信息用于第三方登录集成。

  • 第三方平台信息校验

    点击对应的图标,进行第三方平台信息校验,传入平台标识回调地址,经IFORM系统校验后会发放一个具有三分钟时限的校验码

注意:平台标识回调地址需要在IFORM系统【系统管理】中【第三方接入】中创建相应的第三方平台时填写(服务端人员提供)。

后续步骤与IFORM用户登录相同。

  • 请求登录状态码

    这里进入登录页面,用户输入用户名密码后,获取登录状态码。获得login_state后,前端重定向到指定回调地址。

注意::获取信息加密后传入IFORM系统,具体的接口信息和实现请看这里

  • 获取授权凭证

    重定向成功后,第三方传入于IFORM系统中创建好的第三方平台的相应信息AppKey,使用Appkey登录状态码申请授权凭证

  • 获取令牌

    传入授权凭证AppKeyAppScret以及grant_type,获取access_tokenrefresh_token

  • 获取用户的信息
    调用相应接口获取IFORM用户用于第三方登录的信息。

作者:hugh  创建时间:2024-06-24 13:57
最后编辑:hugh  更新时间:2024-11-25 19:17