详解laravel passport OAuth2.0的4种模式


Posted in PHP onNovember 04, 2019

参考:

https://xueyuanjun.com/post/

1... 熟悉的场景

某个网站,某用户未注册,注册时提示可微信账号登录(github, google都有类似

某网站是第三方(客户端), 认证服务器和资源服务器都在微信,资源是指微信的用户名,头像等

网站目的是获取改用户微信的账户,头像等,方便快速注册. 前提需要用户授权同意.

详解laravel passport OAuth2.0的4种模式

laravel用passport搭建OAuth2认证服务

相当于基于laravel搭建OAuth2 Server.

资源拥有者: laravel server
OAuth2 认证服务器: laravel server
用户: 在laravel server注册过的用户
第三方: 通过api访问的Web端,目的就是要拿到access_token

准备

见文档: https://xueyuanjun.com/post/1...

4种模式

记得用 artisan passport:client 添加对应用户

对应不同应用场景:

详解laravel passport OAuth2.0的4种模式

授权码模式(authorization_code)

实现类似微信授权登录的服务.这个当然是最强大也最复杂的.

用户点击客户端微信登录按钮,url跳转到微信的登录页面, (比如微信登录)

详解laravel passport OAuth2.0的4种模式

用户登录微信, 微信提示是否允许授权.

实际是访问认证服务器的 /oauth/authorize .

详解laravel passport OAuth2.0的4种模式

允许,redirect到 客户端指定的redirect_uri

重定向uri由第三方在步骤1里指定.

后端无法控制具体重定向的url实现,(每个第三方都不一样)只能通过url添加返回参数code.

第三方服务的后端处理该重定向,再次发起访问 /oauth/token ,拿到真正的token

详解laravel passport OAuth2.0的4种模式

隐式授权

和code授权的唯一区别是返回的redirect_uri没有code参数:

http://dev.blog.com:8000/oauth/authorize?client_id=6&response_type=code&scope=&state=SENPYyXJvT0fl4Rnz0Ag&redirect_uri=http%3A%2F%2Fdev.blog.com%3A8000%2Fauth%2Fcallback

密码授权模式(password_credentials)

适用移动端.

无认证过程,客户端登录时直接带上资源服务器注册过的账号密码,就像使用同一个账户系统.

客户端模式(client_credentials)

类似微信等开放平台的认证方式.开发者注册后拿到clientid, client_secret,然后认证去拿token直接用

比密码授权更简单,无需用户名密码,直接用client_id + client_secret.

javascript api

适用spa,不用也行..毕竟还要提交表单登录.

省掉js api 带上 Bearer Token +xxx 的认证,直接放到cookie里.

需添加middleware: \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class

这个 Passport 中间件将会附加 laravel_token Cookie 到输出响应,这个 Cookie 包含加密过的JWT,Passport 将使用这个 JWT 来认证来自 JavaScript 应用的 API 请求,现在,你可以发送请求到应用的 API,而不必显示传递访问令牌.

其他用法

1 私人令牌
 授权方式在用户测试、体验平台提供的认证 API 接口时非常方便
2 scope作用域 
 更细颗粒度控制api权限

总结

以上所述是小编给大家介绍的laravel passport OAuth2.0的4种模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
php Ajax乱码
Apr 09 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
twig里使用js变量的方法
Feb 05 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
laravel返回统一格式错误码问题
Nov 04 #PHP
php 中self,this的区别和操作方法实例分析
Nov 04 #PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 #PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 #PHP
php ZipArchive实现多文件打包下载实例
Oct 31 #PHP
Laravel框架实现抢红包功能示例
Oct 31 #PHP
laravel框架实现后台登录、退出功能示例
Oct 31 #PHP
You might like
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
jquery获取节点名称
2015/04/26 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
浅析Python编写函数装饰器
2016/03/18 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
20行python代码实现人脸识别
2019/05/05 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
Python如何实现单例模式
2016/06/03 面试题
执行总经理岗位职责
2014/02/03 职场文书
年终晚会主持词
2014/03/25 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
公司职员入党自传书
2015/06/26 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
pandas 实现将NaN转换为None
2021/05/14 Python