您的位置:首页 > 编程语言 > PHP开发

使用OAuth Server PHP实现OAuth2服务

2015-05-26 10:16 281 查看
在现在的网络服务中,OAuth2.0服务已经很普遍了,无论是facebook或者微博的第三方登录,还是手机APP登录,都有很广泛的应用。

它主要的目的如下:

如果用户的照片在A网站,他想要在B网站使用A网站的头像,并不需要向B网站提供自己在A网站的用户名和密码,而直接给B一个Access Token来获取A站的照片

具体流程如下:

1)用户访问网站B

2)B需要验证用户的身份

3)B将用户定向到A网站,用户输入帐号密码登录A网站

4)A网站询问是否要将Authentication的权利给B网站

5)用户告诉A站可以将认证权给B站

6)A网站把Authorization Code发给B站

7)B站用Autorization Code向A站换取Access Token

8)当B站拥有Access Token时,就拥有了用户在A站的一些访问权限

这是典型的Authorization Code Grant,常常运用于网络应用之中
还有Implicit Grant认证方式,这个则省去了Auth Code,开放平台直接返回access_token和有效期,用户ID等数据

这种经常运用于手机客户端或者浏览器插件等没有在线服务器的应用
最后一种是Resource Owner Password Credentials Grant

这种是直接在应用中输入帐号密码,然后由应用XAuth技术将其提交给开放平台并得到Access Token

它经常用于PC可执行程序和手机应用,但由于存在一些争议,开发难度也较大,这里我就先不讨论他

安装

你可以在github上下载OAuth Server PHP,也可以用下列命令下载,不过内容都是一样的

?
Shell

在这之后配置数据库

?
SQL

配置

我们来建立一个server.php文件来配置server,这个文件可以被所有的终端来调用。看require once就知道这个文件是平级的。

?
server.php

最后记得配置数据库PDO的用户名和密码

Token控制器

下面,我们将建立一个Token控制器,这个控制器URI将会返回OAuth2的Token给客户端

?
token.php

测试Token控制器

需要先创建一条记录,来注册一个新的应用

?
SQL

然后用命令行调用

?
Shell

这里的URL只是示例,实地操作要确定能找到这个token.php

如果运行正常,则显示

?
JSON

资源控制器的建立和测试

你创建了Token,你需要在API中测试它,于是你写了如下代码

?
resource.php

然后运行下面的命令,记得将YOUR_TOKEN替换成刚才得到的token,还有确保URL的正确

?
Shell

如果没出问题,则会得到下面的结果

?
JSON

认证控制器的创建和测试

验证控制器是OAuth2的杀手锏,它允许你的平台帮助用户验证第三方应用

它不像第一个例子中直接返回一个Access Token,这里稍微复杂一点

?
authorize.php

然后在浏览器中打开这个URL

?
URL

你将会看到一个表单,当你选择yes的时候会弹出你所获得的Authorization Code

现在你可以用这个Authorization Code来刚才建立的token.php获得TOKEN,命令如下

?
Shell

就像刚才一样,你获得了一个TOKEN

?
Json

请在30秒内完成这个操作,因为Authorization Code的有效期只有30秒

用Access Token联系本地用户

当你认证了一个用户并且分派了一个Token之后,你可能想知道彼时到底是哪个用户使用了这个Token

你可以使用handleAuthorizeRequest的可选参数user_id来完成,修改你的authorize.php文件

?
authorize.php

这样一来,用户ID就伴随Token一起存进数据库了

当Token被客户端使用的时候,你就知道是哪个用户了,修改resource.php来完成任务

?
resource.php

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: