详解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编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
深入PHP curl参数的详解
Jun 17 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
php生成图片验证码
Jun 09 PHP
php实现比较全的数据库操作类
Jun 18 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
第二节--PHP5 的对象模型
2006/11/16 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
Javascript的this用法
2017/01/16 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
python中管道用法入门实例
2015/06/04 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
python创造虚拟环境方法总结
2019/03/04 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
如何使用python操作vmware
2019/07/27 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python 爬虫请求模块requests详解
2020/12/04 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
组织生活会表态发言材料
2014/10/17 职场文书
作文批改评语
2014/12/25 职场文书
花木兰观后感
2015/06/10 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
拙作再改《我的收音机情缘》
2022/04/05 无线电