红满堂开放平台是为增强红满堂社区各应用与外界的交互而建立的。我们将在这里讨论社区登陆使用到的授权机制,以及各应用的 API。
————美利坚·落·甜橙
OAuth2.0 概述
OAuth是一种国际通用的授权方式, OAuth2.0的官方技术说明可参看 http://oauth.net/2/ 。
OAuth2.0 较 1.0 相比,整个授权验证流程更简单更安全,也是未来最主要的用户身份验证和授权方式。
关于 OAuth2.0 协议的授权流程可以参考下面的流程图,其中 Client 指第三方应用, Resource Owner 指用户, Authorization Server 是我们的授权服务器, Resource Server 是 API 服务器。
开发者可以先浏览 OAuth2.0 的接口文档,熟悉 OAuth2.0 的接口及参数的含义,然后我们根据应用场景各自说明如何使用 OAuth2.0 。
验证授权
1. 引导需要授权的用户到如下地址:
http://hometown.scau.edu.cn/open/OAuth/authorize?client_id={CLIENT_ID}
&response_type=code&redirect_uri={REDIRECT_URI}&state={STATE}&scope={SCOPE}
注:
{CLIENT_ID}需要找管理员申请
{REDIRECT_URI}为自己定义的一个url,用于接收code。(即在REDIRECT_URL对应的ACTION中,可以通过$_GET[‘code’]来获取code)
此处的“引导”,可以使用重定向。比如php的header(“Location:$url”);
{STATE}:一个随机字符串
{SCOPE}:为空即可
2. 如果用户同意授权,页面跳转至:
{REDIRECT_URI}/?code={CODE}&state={STATE}
3. 服务器 后台 换取Access Token
请求url:
http://hometown.scau.edu.cn/open/OAuth/access_token
数据:
client_id:{CLIENT_ID},
client_secret:{CLIENT_SECRET},
grant_type:authorization_code,
redirect_uri:{REDIRECT_URI},
code:{CODE}
注:CLIENT_SECRET找管理员申请,code在上一步获取。使用post发送数据。如果验证通过,将以 JSON 的形式返回 Access Token :
{
"access_token":"f0dd645242a4736248ed1b956637f181",
"expires_in":86400,
"scope":null,
"uid":"294940"
}
4. 使用获得的 Access Token 调用 API
移动应用的验证授权
1. 引导需要授权的用户到如下地址:
http://hometown.scau.edu.cn/open/OAuth/authorize?client_id={CLIENT_ID}
&response_type=token&redirect_uri={REDIRECT_URI}&state={STATE}&scope={SCOPE}
2. 如果用户同意授权,页面跳转至:
{REDIRECT_URI}/state={STATE}#access_token={ACCESS_TOKEN}&expires_in={EXPIRE_IN}&scope={SCOPE}&uid={UID}
3. 使用获得的 Access Token 调用 API