Laravel使用oauth2.0

2018年3月27日 0 作者 筱枫

oauth2.0是一种十分热门的权限验证方案,laravel采用passport提供了非常强大的功能, 可以在短短几分钟就构建一个oauth服务器

如果对oauth不是很熟悉的话,推荐可以看看廖雪峰老师的oauth教程

根据官方教程来,首先安装passport

composer require laravel/passport

接着注册服务提供者

在 config/app.php 的 providers 数组中新加一行:

Laravel\Passport\PassportServiceProvider::class,

最后,运行迁移命令

php artisan migrate

好了,现在基础工作已经做好,打开数据库,可以看到有几张以oauth开头的表,这是passport验证所需要用到的表

接着运行:

php artisan passport:install

来生成所需密钥

 

之后将 Laravel\Passport\HasApiTokens Trait 添加到 App\User 模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用域

 

然后在 AuthServiceProvider 的 boot 方法中调用 Passport::routes

这个函数会注册一些在访问令牌、客户端、私人访问令牌的发放和吊销过程中会用到的必要路由。

最后,将config/auth.php 中 api driver 由 token 更改为 passport

好了,以上基本就是配置的全部内容,如有什么不理解的地方可以查看官方文档

 

接着,来让我们使用下这强大的oauth

首先,确保你有一个用户,可以采用

php artisan make:auth 

来生成最基本的用户验证模块

然后再运行一次

php artisan migrate

来生成所需要的数据表

之后你可以访问你站点的链接进行注册,链接格式类似于 http://你的域名/register

如果你已经采用了其他的方式来进行验证,则可以跳过这一步

 

下面,为了简单起见,我们直接使用

php artisan passport:client

来创建一个客户端

然后在浏览器中访问http://你的域名/oauth/clients便可以看到刚刚生成的客户端了、

如果你不想采用这个方法的话,你需要做一些额外的工作,使用post http://你的域名/oauth/clients

传递参数 name 和 redirect 这两个参数生成客户端,之后passport会返回一个创建好的客户端信息,里面包含了id和secret,这两个是关键参数

接下来,打开数据表oauth_clients,在当中找到刚刚创建的客户端,确认redirect链接是否正确,这个链接非常重要,主要用于回传code,然后你可以通过这个code请求到访问token!

为了简单起见,我们这里了就直接在这个oauth服务端中添加路由,当作客户端来用

当然你可以另开一个php文件或者其他项目,当作客户端来,也是可以的

注意图中的客户端id、返回地址等,需要跟数据库里面的一致。
现在保存文件,我们来访问下 http://你的域名/redirect

瞧,验证页面已经出来了,注意看上面的链接,这里请忽略我链接里面的state=3,这个参数是我额外加上去的
然后,现在点击authorize
会出来这么一段话 Sorry, the page you are looking for could not be found.
此时再看上面的链接地址,已经跳转到你的返回地址,后面跟了一大堆的参数
这是正常的,因为你现在还没有编写回调路由,现在就开始编写

好了,现在再重新访问 http://你的域名/redirect 点击authorize,便可以看到结果了

注意,上面的callback是我的客户端返回地址,如果你写成其他什么名字的话,请务必改掉!
如此,已经获取到了token,接下来就是将token附加到参数里面,去访问那些之前访问不到的资源了