详解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实现读取和编写XML DOM代码
Apr 07 PHP
header跳转和include包含问题详解
Sep 08 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
PHP7 其他修改
Mar 09 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
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Django发送html邮件的方法
2015/05/26 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python 内置模块详解
2019/01/01 Python
python如何更新包
2020/06/11 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
Python爬取某平台短视频的方法
2021/02/08 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
项目经理的岗位职责
2013/11/23 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
2014年度个人工作总结
2014/11/07 职场文书
特种设备安全管理制度
2015/08/06 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL