详解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技术构造远程服务(上)
Oct 09 PHP
在PHP中执行系统外部命令
Oct 09 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php语言的7种基本的排序方法
Dec 28 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
PHP多进程简单实例小结
Nov 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
用文本文件制作留言板提示(下)
2006/10/09 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python中GIL的使用详解
2018/10/03 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
python调用外部程序的实操步骤
2019/03/04 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
承认错误的检讨书
2014/01/30 职场文书
拆迁委托协议书
2014/09/15 职场文书
产品委托授权书范本
2014/09/16 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL