用户身份整合

本平台提供了一套用户身份认证系统, 如果你的应用想与之整合:

  1. 使用本平台的用户身份作为登录标识
  2. 希望与其他本平台的应用该系统采用统一登录整合.
  3. 需要调用某些需要用户认证之后才能调用的Api.

那么你就需要接入本系统的OAuth认证机制.

接入方法

步骤1

引导用户访问 http://<platform-hosturl>/oauth/authorize

参数 必填 说明
client_id Y 应用的key
redirect_uri Y 登录后跳转URL地址, 必须是完整的URL地址, 需要接收code参数, 参照步骤2
response_type N 默认为code
view N 使用的页面模板, 默认为default
ttl N session有效时间
ttl N session有效时间

例如:

http://<platform-hosturl>/oauth/authorize?client_id=aabbcc&redirect_uri=http%3A%2F%2Fexample.com%2Foauth-callback


步骤2

用户完成登录操作后, 会被自动引导到redirect_uri里声明的地址, 并附加上一个凭据(token)提取码: code .

例如:

redirect_uri = http://example.com/oauth-adapter?action=callback

完成后会引导浏览器跳转到:

http://example.com/callback-url?action=callback&code=<token-pick-code>

此时需要通过token-pick-code, 调用 http://<platform-hosturl>/oauth/token?grant_type=authorization_code 获取用户凭据(token), 以及基础的用户信息.

这是一次服务器对服务器的api请求, 必须象调用普通api一样, 对请求进行认证.

调用的返回结果如下:

{
  "access_token": "72jte6shi2q7da22bo2al2jn",
  "data": {
    "@id": "0001001",
    "login": "admin",
    "email": "admin@example.com",
    "firstname": "barack",
    "lastname": "obama"
  },
  "expires_in": 1409217380,
  "refresh_expires": 1411805780,
  "refresh_token": "fxfbe64zvw52pkintbitnwkxoqjusfz2",
  "session_id": "kv6sdomumjxnme5so2ckbw"
}
属性 格式 说明
access_token 字符串 就是api的身份凭据token
data JSON 是用户的基础信息, 具体属性由本系统的用户后端决定.
expires_in int, unix时间戳 access_token过期时间
refresh_token 字符串 如果access_token过期, 则可以凭据access_token进行刷新.
refresh_expires int, unix时间戳 标识着refresh_token的有效刷新期限, 通常为几个月.
session_id 字符串 如果本次登录信息用于统一登录. 则需要调用一次session api

步骤3

你可以把步骤2的结果都保存在当前session中. 这样就完成了用户的登录过程.

如果要以用户身份调用Api, 则要在header的Authorization属性中放置Bearer<空格>access_token.

GET /api/xxxx?client_id=xxxx&sign_time=xxxxxxxxxx&sign=xxxxx HTTP/1.1
Authorization: Bearer 72jte6shi2q7da22bo2al2jn
...

其他知识

统一登录, 统一退出

如果是共享统一登录状态, 本平台相当于提供了一个共享session凭据, 只是本session并不存储自定义数据, 而只有"有效/无效"状态, 页面初始化时, 应该调用一次session刷新方法, 如果返回出错, 则表示session已过期, 这通常是用户已经在其他系统点击了退出操作.

每次session刷新都会将过期时间设置为当前的30分钟后.

API: /api/platform/oauth/session_check

参数 必填 类型 说明
session_id Y string get token时所获得的session id