网站应用微哨登录开发指南 Authorization code 模式
basehost :https://api.weishao.com.cn/ (开发测试地址,https)
准备工作
网站应用微哨登录是基于OAuth2.0协议标准构建的微哨OAuth2.0授权登录系统。
在进行微哨OAuth2.0授权登录接入之前,开发者需要在微哨开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,获得相应的AppID和AppSecret。申请微哨登录且通过审核后,即可开始接入流程。
授权流程说明
微哨OAuth2.0授权登录让微哨用户使用微哨身份安全登录第三方应用或网站。微哨用户授权登录后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微哨开放平台授权关系接口调用,从而可实现获取微哨用户基本开放信息和帮助用户实现基础开放功能等。
微哨OAuth2.0授权登录目前支持Authorization code模式,适用于拥有Web端的应用授权。该模式整体流程为:
1. 第三方发起微哨授权登录请求,微哨用户允许授权第三方应用后,微哨会拉起应用或重定
向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
第一步:请求code
第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=base_api),则可以通过在PC端打开以下链接:
https://api.weishao.com.cn/oauth/authorize?client_id=123&redirect_uri=https%3a%2f%2fapi.weishao.com.cn%2fauth-code-flow.htm&response_type=code&scope=demo&state=123
参数名称 | 必填 | 说明 | 备注 |
---|---|---|---|
client_id: | √ | 建议5-20位;|开发者使用api唯一标识 | 微哨提供的app_key |
redirect_uri: | √ | 回调地址 | 此步骤需要urlencode,用来接收本接口返回的code参数等 |
response_type: | √ | ||
scope: | √ | 作用域 | 与注册时匹配 |
state: | √ |
scope使用注意: base_api
(默认值)可以访问基础api(/userinfo)且支持静默模式不弹出授权提醒, all
可以所有开放api, manager
(微哨管理员)
此步骤需要redirect_uri 需要urlencode编码
结果:
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名填写的授权域名不一致或scope不为demo。
如果没有登录,转到oauth登录页面.
点击登录后 开发者回调接口(第一步 填写的 redirect_uri 接口)得到如下参数:
code=GwDtUOxEwNt5icdGxelpR3I9OMX3XHHH&state=123
如果已经登录状态,开发者回调接口(第一步 填写的 redirect_uri 接口)直接得到如下参数:
code=GwDtUOxEwNt5icdGxelpR3I9OMX3XHHH&state=123
参数名称 | 说明 |
---|---|
code: | 请求access_token需要的code |
state |
第二步:通过code换取网页授权access_token
需要注意的是,这里通过code获得的access_token仅能用于网页授权相关接口,与【高级API参考手册】中相关接口所需使用的access_token不同,两者不可混用。此外,应用的secret和获取到的access_token都具有很高的安全级别,必须_只_保存在服务器端,不允许传递给客户端/页面前端。下面的刷新access_token、获取用户信息等步骤也必须从服务器测发起。
- URL:
https://basehost/oauth/token
- 需要授权: 是
- 请求类型: HTTP POST
- 请求数据类型:JSON(application/json)
请求参数
{
"grant_type":"authorization_code",
"app_key": "123",
"app_secret":"secret",
"code":"GwDtUOxEwNt5icdGxelpR3I9OMX3XHHH",
"redirect_uri":"https://api.weishao.com.cn/auth-code-flow.html"
}
注:redirect_uri 该步骤不需要urlencode,原始url即可,(必须与第一步 填写的 redirect_uri一致)
返回结果:
{
"access_token":"fDanz0ydkCqVsgSoze7mrCnwJIsN0dL",
"expires_in":"1209600",
"scope":"demo",
"refresh_token":"HhbiRKzjVnKdvGfmuGjvh3Clm4AIMqV8",
"token_type":"Bearer"
}
错误返回样例:
{
"errcode":40029,
"errmsg":"invalid code"
}
参数名称 | 说明 | 备注 |
---|---|---|
errcode | 错误编码 | |
errmsg | 错误提示 |
第三步:刷新access_token(如果需要)
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新。当refresh_token失效之后,需要用户重新授权。
- URL:
https://basehost/oauth/token
- 需要授权: 是
- 请求类型: HTTP POST
- 请求数据类型:JSON(application/json)
参数名称 | 必填 | 说明 | 备注 |
---|---|---|---|
grant_type | √ | refresh_token[固定参数] 换取新token|开发者使用api唯一标识 | |
app_key | √ | 开发者使用api唯一标识 | |
app_secret | √ | 获取accesstoken秘钥 | |
refresh_token | √ | 上次获取token中反馈的refresh_token |
url: 'https://basehost/oauth/token',
{
"grant_type": "refresh_token",
"client_id": "your clientid",
"client_secret": "appkey",
"refresh_token": "***********"
}
换取响应 [POST]
- Response 200 (application/json)
{
"access_token": "xN2836yQAQfDURxVPds0IM9vfUk3IJC5",
"expires_in": 604800,
"scope": "demo",
"refresh_token": "VFlAp82EUWNQJkokRvoELSPhPpO3pSPS",
"token_type": "Bearer"
}
第四步:获取用户信息
- URL:
https://basehost/userinfo?access_token=tokenstring
- 需要授权: 是
- 请求类型: HTTP GET
参数名称 | 必填 | 说明 | 备注 |
---|---|---|---|
access_token | √ | Authorization code 模式下获取的 access_token |
返回正确结果
{
"name": "ABC",
"schoolcode": "ruijie",
"student_number": "panyuntao",
"sex": "boy",
"photo_live": "http://store.weishao.com.cn///group1/M00/00/00/rBGoWlawRX6IbazWAALtCN376l4AAAAHA5mBBMAAu0g965.jpg",
"mood_words": "",
"nick_name": "",
"organization_id": "234",
"organization": "微哨大学",
"uid": "099",
"identity": "teacher",
"wx_openid":"abcd",
"openid": "",
"unionid": "",
"schoolname": "微哨大学",
"schoolicon_url": "http://store.weishao.com.cn//group1/M00/00/00/rBGoWlZ5Im2IAIb3AAAoqbZ4SkEAAAAGA4-VAEAACjB386.png"
}
返回正确参数说明
参数名称 | 类型 | 说明 | 备注 |
---|---|---|---|
name | string | 姓名 | |
sex | string | 性别,”boy”表男,”girl”表示女 | |
photo_live | string | 头像图片的url地址 | |
mood_words | string | 用户签名 | |
student_number | string | 学工号 | 发送消息使用 |
nick_name | string | 昵称 | |
organization | string | 用户所在各级组织结构名称 | |
uid string | 用户id | 发送消息时,消息的接收者使用该字段 | 发送消息使用 |
identity | string | 身份,”teacher”表示老师,”student”表示学生 | |
schoolcode | string | 学校编码 | |
wx_openid | string | openid 绑定的公众号id,未绑定默认为空 | |
openid | string | openid 普通用户的标识,对当前开发者帐号唯一 | |
unionid | string | unionid 用户统一标识。针对一个微哨开放平台帐号下的应用,同一用户的unionid是唯一的。 | |
schoolname | string | schoolname 学校名称 | |
schoolicon_url | string | schoolicon_url 学校logo |
返回错误结果
{ "code":401/403/500,
"data":"Unauthorized",
"errno":"100401"//内部错误代码}
参数名称 | 说明 | 备注 |
---|---|---|
errcode | 错误编码 | |
errmsg | 错误提示 |
访问权限限制
访问级别:普通接口
频次限制:无
授权scope:base_api
注销登录
注销登录将会清除OAuth服务对应用的授权状态,用户再次进入应用时,需要重新授权。
- URL:
https://basehost/loginout
- 请求类型: HTTP GET
请求参数
参数名称 | 必填 | 说明 | 备注 |
---|---|---|---|
post_logout_redirect_uri | x | 注销登录后回调地址,默认跳转至https://basehost/login |
注销成功:
成功跳转到post_logout_redirect_uri或者/login页面
注销失败结果
{
"errcode":500,
"errmsg":"注销失败"
}
参数名称 | 说明 | 备注 |
---|---|---|
errcode | 错误编码 | |
errmsg | 错误提示 |