Laravel使用oauth2.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附加到参数里面,去访问那些之前访问不到的资源了