详解laravel passport OAuth2.0的4种模式

参考:

https://xueyuanjun.com/post/

1... 熟悉的场景

某个网站,某用户未注册,注册时提示可微信账号登录(github, google都有类似

某网站是第三方(客户端), 认证服务器和资源服务器都在微信,资源是指微信的用户名,头像等

网站目的是获取改用户微信的账户,头像等,方便快速注册. 前提需要用户授权同意.

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 添加对应用户

对应不同应用场景:

授权码模式(authorization_code)

实现类似微信授权登录的服务.这个当然是最强大也最复杂的.

用户点击客户端微信登录按钮,url跳转到微信的登录页面, (比如微信登录)

用户登录微信, 微信提示是否允许授权.

实际是访问认证服务器的 /oauth/authorize .

允许,redirect到 客户端指定的redirect_uri

重定向uri由第三方在步骤1里指定.

后端无法控制具体重定向的url实现,(每个第三方都不一样)只能通过url添加返回参数code.

第三方服务的后端处理该重定向,再次发起访问 /oauth/token ,拿到真正的token

隐式授权

和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种模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Laravel5.5中利用Passport实现Auth认证的方法

    前言 最近在写一个前后端分离项目,本来想用 Jwt-auth + Dingo 开发的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的 Api Resource.Laravel Passport 是一套已经封装好的 OAuth2 服务端实现 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. OAuth 2.0 是目前比较流行的做法,它率先被Google, Yahoo, Microsoft, Fac

  • 详解Laravel5.6 Passport实现Api接口认证

    很多企业做项目使用前后端分离,后端提供接口地址,前端使用接口地址拿数据,并渲染页面.那么,前端用户登录如何使用接口进行认证?网上各种教程写的不堪入目,完全看不懂,所以我根据自己的理解,写下此篇文章,希望能帮助到大家. 后端(Laravel5.6框架) 1.使用 composer 安装 Passport ,打开终端,执行命令: composer require laravel/passport #安装完成后,在composer.json文件中会看到文件版本信息 2.接下来,将 Passport 的

  • PHP观察者模式示例【Laravel框架中有用到】

    本文实例讲述了PHP观察者模式.分享给大家供大家参考,具体如下: <?php //观察者模式 //抽象主题类 interface Subject { public function attach(Observer $Observer); public function detach(Observer $observer); //通知所有注册过的观察者对象 public function notifyObservers(); } //具体主题角色 class ConcreteSubject imp

  • 关于laravel模板中生成URL的几种模式总结

    1.通过url辅助函数(路由)生成: location.href = "{{url('user/index2')}}"; 或者: location.href = "{{url::to('user/index2')}}"; 2.通过别名(路由)生成,前提是在注册路由的时候要指定别名, 例如: Route::get('user/index2',['as' => 'user/index2', 'uses' => 'UserController@index1']

  • Laravel中服务提供者和门面模式的入门介绍

    前言 在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel的服务提供者的方式来使用. 这两者其实区别不大,主要是前者使用的话,会跟业务代码产生依赖,想象一下,如果一个控制器之中引用了很多自定义的类文件的话,那么可以想像会产生多少依赖,所以我们可以使用服务提供者的方式,向laravel的容器内注册类,这样的话,就能够在一个单独的配置文件里面来管理依赖,逻辑和后期维护也会方便不少. 使用门面主要是可以不需要去实例化类,可以使用静态方法的方式去

  • 详解laravel安装使用Passport(Api认证)

    Laravel通过传统的登录表单已经让用户认证变得很简单,但是API怎么办?API通常使用token进行认证并且在请求之间不维护session状态.Laravel使用Laravel Passport让API认证变得轻而易举,Passport基于Alex Bilbie维护的League OAuth2 server,可以在数分钟内为Laravel应用提供完整的OAuth2服务器实现. 中文文档 http://laravelacademy.org/post/6813.html 安装 composer

  • 详解laravel passport OAuth2.0的4种模式

    参考: https://xueyuanjun.com/post/ 1... 熟悉的场景 某个网站,某用户未注册,注册时提示可微信账号登录(github, google都有类似 某网站是第三方(客户端), 认证服务器和资源服务器都在微信,资源是指微信的用户名,头像等 网站目的是获取改用户微信的账户,头像等,方便快速注册. 前提需要用户授权同意. laravel用passport搭建OAuth2认证服务 相当于基于laravel搭建OAuth2 Server. 资源拥有者: laravel serv

  • 详解ASP.NET Core3.0 配置的Options模式

    上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式. 一.Options的使用 上一章有个配置的绑定的例子,可以将配置绑定到一个Theme实例中.也就是在使用对应配置的时候,需要进行一次绑定操作.而Options模式提供了更直接的方式,并且可以通过依赖注入的方式提供配置的读取.下文中称每一条Options配置为Option. 1.简单的不为Option命名的方式 依然采用这个例子,在appsettings.json中存在这样的配置: { "Th

  • 详解model.train()和model.eval()两种模式的原理与用法

    一.两种模式 pytorch可以给我们提供两种方式来切换训练和评估(推断)的模式,分别是:model.train() 和 model.eval(). 一般用法是:在训练开始之前写上 model.trian() ,在测试时写上 model.eval() . 二.功能 1. model.train() 在使用 pytorch 构建神经网络的时候,训练过程中会在程序上方添加一句model.train(),作用是 启用 batch normalization 和 dropout . 如果模型中有BN层(

  • SpringSecurity oAuth2.0的四种模式(小结)

    目录 1.1. 授权码授权模式(Authorization code Grant) 1.1.1. 流程图 1.1.2. 授权服务器配置配置 1.1.3. 资源服务器配置 1.1.5. 使用场景 1.2. 隐式授权模式(Implicit Grant) 1.2.1. 流程图 1.2.2. 改动 authorizedGrantTypes 1.2.3. 操作步骤 1.2.4. 使用场景 1.3. 密码模式(Resource Owner Password Credentials Grant) 1.3.1.

  • 详解Laravel制作API接口

    需要注意的是:API有它的具体用途,我们应该清楚它是干啥的.访问API的时候应该输入什么.访问过API过后应该得到什么. 在开始设计API时,我们应该注意这8点.后续的开发计划就围绕着这个进行了. 1.Restful设计原则 2.API的命名 3.API的安全性 4.API返回数据 5.图片的处理 6.返回的提示信息 7.在线API测试文档 8.在app启动时,调用一个初始化API获取必要的信息 用laravel开发API 就在我上愁着要不要从零开始学习的时候,找到了这个插件dingo/api那

  • mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

    1.mysql数据库的组成与相关概念 首先明白,mysql是关系型数据库,和非关系型数据库中最大的不同就是表的概念不一样. +整个mysql环境可以理解成一个最大的数据库:A +用mysql创建的数据库B是属于A的,是数据的仓库,相当于系统中的文件夹 +数据表C:是存放数据的具体场所,相当于系统中的文件,一个数据库B中包含若干个数据表C(注意此处的数据库B和A不一样) +记录D:数据表中的一行称为一个记录,因此,我们在创建数据表时,一定要创建一个id列,用于标识"这是第几条记录",id

  • 详解.NET Core 3.0 里新的JSON API

    为什么需要新的 JSON API ? JSON.NET  大家都用过,老版本的 ASP.NET Core 也依赖于 JSON.NET . 然而这个依赖就会引起一些版本问题:例如 ASP .NET  Core某个版本需要使用 JSON .NET  v10 ,而另一个库需要使用 JSON.NET  v11 :或者 JSON .NET   出现了一个新版本,而ASP .NET Core 还不能支持这个版本,而您却想使用该版本. System.Text.Json   随着 NET Core  3.0 的

  • 详解Laravel框架的依赖注入功能

    概述 任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责: 1.自动地在构造函数中检测依赖关系 2.如果需要构建这个依赖关系 3.通过构造函数创建对象形成依赖关系 来看一个非常简单的例子. <?php namespace App\Http\Controllers; use App\User; use App\Repositories\UserRepository; use App\Http\Controllers\Controller; class UserController exte

  • 详解Laravel服务容器的优势

    概述 laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造. 因为使用了服务容器,laravel中大部分对象实例化的方式是这样的: $obj1 = $container->make('class1', 'class2'); $obj2 = $container->make('class3', 'class4'); 但是在没有使用服务容器的情况下,以下这种方式同样可以做到: $obj1 = new class1(new class2()); $obj2 =

  • 详解JS异步加载的三种方式

    一:同步加载 我们平时使用的最多的一种方式. <script src="http://yourdomain.com/script.js"></script> <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前加载完成,才能进行下一步操作.所以默认同步执行才是安全的.但这样如果js中有输

随机推荐