详解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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 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
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php动态变量定义及使用
2015/06/10 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现挑选出来100以内的质数
2015/03/24 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python多任务之协程的使用详解
2019/08/26 Python
python可视化实现KNN算法
2019/10/16 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
django实现后台显示媒体文件
2020/04/07 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
珍爱生命主题班会
2015/08/13 职场文书
运动会100米广播稿
2015/08/19 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA