详解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集成FCK的函数代码
Sep 27 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php判断访问IP的方法
Jun 19 PHP
php生成二维码
Aug 10 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
php自定义时间转换函数示例
Dec 07 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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&mysql(一)
2006/10/09 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
js获取Get值的方法
2016/09/29 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
python脚本内运行linux命令的方法
2015/07/02 Python
python实现自主查询实时天气
2018/06/22 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
python tornado修改log输出方式
2019/11/18 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
django中related_name的用法说明
2020/05/20 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
关于赌博的检讨书
2014/01/24 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang