OAuth学习整理,0的4种模式_php实例_脚本之家

图片 1

适用spa,不用也行..毕竟还要提交表单登录.

HTTP/1.1 302 FoundLocation: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA &state=xyz
1 私人令牌 授权方式在用户测试、体验平台提供的认证 API 接口时非常方便2 scope作用域 更细颗粒度控制api权限

参数解释:

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

Resource
server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

比密码授权更简单,无需用户名密码,直接用client_id + client_secret.

POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencodedgrant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

记得用 artisan passport:client 添加对应用户

近期把OAuth系统学习一下,并完成了授权码模式的PHP实现,此篇文章主要介绍OAuth相关知识,分享一些参考资料。

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

  • response_type:表示授权类型,此处的值固定为”token”,必选项。
  • client_id:表示客户端的ID,必选项。
  • redirect_uri:表示重定向的URI,可选项。
  • scope:表示权限范围,可选项。
  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。

和code授权的唯一区别是返回的redirect_uri没有code参数:

  • 授权码模式:第三方WEB应用常用模式,用户登录三方应用,获得临时授权code,
    第三方应用通过code换取access_token ,访问资源服务器。
  • 简化模式: 基于浏览器认证,可以用在浏览器单页应用。
  • 客户端模式:客户端直接获取授权,与用户无关,一般用于API认证
  • 密码模式:用户把用户名和密码发送给第三方应用,第三方应用拿着用户名和密码去授权服务器校验。第三方应用和授权服务器是同一家公司或者是非常可信的大公司。

laravel用passport搭建OAuth2认证服务

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

4种模式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access
token)。OAuth 2.0定义了四种授权方式。

资源拥有者: laravel serverOAuth2 认证服务器: laravel server用户: 在laravel server注册过的用户第三方: 通过api访问的Web端,目的就是要拿到access_token

Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

无认证过程,客户端登录时直接带上资源服务器注册过的账号密码,就像使用同一个账户系统.

  • 授权码模式(authorization code)
  • 简化模式
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

后端无法控制具体重定向的url实现,只能通过url添加返回参数code.

Resource Owner:资源所有者,本文中又称”用户”。

类似微信等开放平台的认证方式.开发者注册后拿到clientid,
client_secret,然后认证去拿token直接用

2.搭建资源服务器(Resource serve)

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

Third-party
application:第三方应用程序,本文中又称”客户端”,即上一节例子中的”云冲印”。

需添加middleware:
LaravelPassportHttpMiddlewareCreateFreshApiToken::class

  • 应用ID申请:第三方应用程序需要向认证服务器提供商申请,需要填写应用的名称,回调地址,返回client_id和client_secret
  • 用户登录过程:认证服务器必须实现一种登录认证方式,可以是登录页,也可以通过HTTP
    Basic等方式。
  • redirect_uri: 回调地址必须和申请应用填写保持一致。
  • state:通常做法是将stata和用户会话绑定,在申请token时携带客户端身份,可以用于防止跨站请求攻击,认证服务器也可以强制要求客户端携带state

图片 1运行流程

客户端模式

  1. 搭建认证服务器(Authorization server)

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

POST /api/user HTTP/1.1Host: server.example.comaccess_token=2YotnFZFEjr1zCsicMWpAA

发表评论

电子邮件地址不会被公开。 必填项已用*标注