Oauth配置

如果您的应用包含供微信公众号的后台配置页面,此时您需要获取公众账号的信息,通过Oauth认证方式可获取公众号信息登录信息,直接从微俱聚平台直接跳到应用配置页面,进行应用的配置,过程不需要用户进行重新登录。

 

一、开发流程

 

1、 申请API Key

为了保护平台用户的数据,防止API被滥用或恶意使用,开放平台要求每个API的使用者(开发者)申请一个API Key,而每个API Key唯一标识一个API使用者。开发者申请API Key的时候需要提供回调的URL等信息。如下图开启Oauth认证

 

 

2、完成回调逻辑

当微聚俱用户需要进入应用配置,从微聚俱点击配置链接进入,此时微聚俱验证了用户请求的合法性后会重新定到开发者申请API Key时填写的回调URL,并且带上code参数,开发者获取此code参数值,然后在服务器端发请求(比如用Httpclient)获取此用户信息,如果获取成功表示认证成功。详情参考下文。

二、Oauth2.0接入

 

1、 OAuth2.0的授权访问流程

关于OAuth2.0协议规范,请参考这里。用户使用OAuth2.0的流程可以简单概括为:

已经购买应用的用户请求访问应用的配置页面

微俱聚向用户显示一个授权页面,用户在此页面确认是否同意应用的请求

如果用户同意授权,应用会获取到一个访问令牌(access_token),通过此令牌,应用可以访问授权用户的数据

如果访问需要授权的Api,请使用https协议,加上access_token的Header

 

2. Server-side flow 授权流程

微俱聚目前支持一种OAuth2.0的授权流程, 就是服务端的WEB应用授权(server-side flow)。 流程如下:

当用户需要进入应用的页面时,微俱聚会回调应用申请API Key的时候填写的redirect_uri页面,比如应用的OAuth2回调页面是 http://www.example.com/auth,那么微俱聚会调用 http://www.example.com/auth?code=xxxxxxxxx , 也就是把 autorization_code 作为参数 code 传递,应用获取此 autorization_code 用来获取 acess_token。

应用通过 autorization_code 获取用户信息和 access_token。获取 access_token 的URL如下

https://oauth.weijuju.com/service/oauth2/token
参数 描述
client_id 必选参数,应用的唯一标识,对应于APIKey
client_secret 必选参数,应用的唯一标识,对应于API Secret
redirect_uri 必选参数,用户授权完成后的回调地址,应用需要通过此回调地址获得用户的授权结果。此地址必须与在应用注册时填写的回调地址一致
grant_type 必选参数,此值可以为 authorization_code 或者 refresh_token 。在本流程中,此值为 authorization_code
code 必选参数,上一步中获得的authorization_code

返回结果

{ "access_token":"a14afef0f66fcffce3e0fcd2e34f6ff4", "expires_in":3920, "refresh_token":"5d633d136b6d56a41829b73a424803ec", "wxinfo": { "wuid":1231, "wxname":"古城钟楼奇葩版"} }

 

三、 access_token 有效期与 refresh_token

在OAuth2.0中,access_token不是长期有效的。在授权获取access_token时会一并返回其有效期,也就是返回值中的expires_in参数。 在 access_token 的使用过程中,如果 access_token 过期了,可以通过refresh_token的方式来换取新的access_token和refresh_token。

通过refresh_token换取access_token的处理过程如下:

https://oauth.weijuju.com/service/oauth2/token
参数 描述
client_id 必选参数,应用的唯一标识,对应于APIKey
client_secret 必选参数,应用的唯一标识,对应于API Secret
redirect_uri 必选参数,用户授权完成后的回调地址,应用需要通过此回调地址获得用户的授权结果。此地址必须与在应用注册时填写的回调地址一致
grant_type 必选参数,此值可以为 authorization_code 或者 refresh_token 。在本流程中,此值为 refresh_token
refresh_token 必选参数,刷新令牌

返回结果

{ "access_token":"a14afef0f66fcffce3e0fcd2e34f6ff4", "expires_in":3920, "refresh_token":"5d633d136b6d56a41829b73a424803ec" }