本平台提供了一套用户身份认证系统, 如果你的应用想与之整合:
那么你就需要接入本系统的OAuth认证机制.
引导用户访问 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
用户完成登录操作后, 会被自动引导到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 |
你可以把步骤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 |