zl程序教程

您现在的位置是:首页 >  其它

当前栏目

oAuth

OAuth
2023-09-14 09:14:21 时间

前言

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。

同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。

业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。

互联网很多服务如Open API,很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。
在官方网站的首页,可以看到下面这段简介:

An open protocol to allow secure API authorization in a simple and
standard method from web, mobile and desktop applications.

大概意思是说OAUTH是一种开放的协议,为桌面、手机或web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。

OAUTH类似于Flickr Auth、Google’s AuthSub、Yahoo’s BBAuth、 Facebook Auth等。

1、协议特点

  • 简单:不管是OAUTH服务提供者还是应用开发者,都很易于理解与使用;

  • 安全:没有涉及到用户密钥等信息,更安全更灵活;

  • 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

2、OAuth2四种授权模式

2.1 授权码模式

授权码模式(authorization code)是功能最完整、流程最严密的授权模式,code保证了token的安全性,即使code被拦截,由于没有app_secret,也是无法通过code获得token的。

2.1.1 角色行为与功能

  • 资源所有者
    只需要允许或拒绝第三方应用获得授权

  • 第三方应用
    申请成为资源服务器的第三方应用
    获取资源服务器提供的资源

  • 授权服务器
    提供授权许可code、令牌token等

  • 资源服务器
    提供给第三方应用注册接口,需要提供给第三方应用app_id和app_secret
    提供给第三方应用开放资源的接口

2.1.2 授权码模式授权方式顺序图

在这里插入图片描述

2.2隐式授权模式/简化模式

和授权码模式类似,只不过少了获取code的步骤,是直接获取令牌token的,适用于公开的浏览器单页应用,令牌直接从授权服务器返回,不支持刷新令牌,且没有code安全保证,令牌容易因为被拦截窃听而泄露。

2.3密码模式

使用用户名/密码作为授权方式从授权服务器上获取令牌,一般不支持刷新令牌。

2.4客户端凭证模式

一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌。

总结

OAuth2.0 不是一个Authentication Protocol, 而是一个Authorization framework,授予应用对API的访问权限(delegate access to APIs)。OAuth设定了对于API访问的scope的权限,以及支持多种授权方式,以及使用场景。OAuth提供了更好的安全性以及便利,简化了软件系统的复杂性。