详解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 正则学习实例
Jul 30 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
关于js与php互相传值的介绍
Jun 25 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
如何离线执行php任务
Feb 21 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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游戏编程25个脚本代码
2011/02/08 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
python 七种邮件内容发送方法实例
2014/04/22 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
python实现贪吃蛇小游戏
2020/03/21 Python
对Python3 序列解包详解
2019/02/16 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
linux比较文件内容的命令是什么
2015/09/23 面试题
给儿子的表扬信
2014/01/15 职场文书
跳蚤市场口号
2014/06/13 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
教师个人年终总结
2015/02/11 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书