胶州市 网站建设,网页前端开发用什么软件,如何打造平台,江都建设招标网站什么是OAuth2.0
OAuth#xff08;Open Authorization#xff09;是一个关于授权#xff08;authorization#xff09;的开放网络标准#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息#xff0c;而不需要将用户名和密码提供给第三方移动应用或…什么是OAuth2.0
OAuthOpen Authorization是一个关于授权authorization的开放网络标准允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用目前的版本是2.0版 用户可以通过选择其他登录方式来使用gitee这里就使用到了第三方认证。
来自RFC 6749 OAuth 引入了一个授权层用来分离两种不同的角色客户端和资源所有者。…资源所有者同意以后资源服务器可以向客户端颁发令牌。客户端通过令牌去请求数据。 为什么要使用OAuth2.0
在OAuth之前HTTP Basic Authentication, 即用户输入用户名密码的形式进行验证, 这种形式是不安全的。OAuth的出现就是为了解决访问资源的安全性以及灵活性。OAuth使得第三方应用对资源的访问更加安全。 小静现在想要将手机云中的相册美照放置到QQ空间中展示按照传统方式小静要怎么做呢
将照片从“手机云”中download下来在上传到“QQ空间相册”展示。下载/上传太麻烦了小静可以直接把“云相册”的账号和密码告诉“QQ空间”由“QQ空间”下载照片在上传。
对于上面的两种方法方法一太麻烦但是相对于小静来说是安全的方法二对于小静是比较方便但是将账号密码告诉了“QQ空间”就相当于把所有的“手机云”资料交给了它这肯定是不可取的。
所以为了解决类似上面的问题Oauth协议诞生了。
OAuth2.0协议流程
应用场景
原生app授权app登录请求后台接口为了安全认证所有请求都带token信息如果登录验证、 请求后台数据。前后端分离单页面应用前后端分离框架前端请求后台数据需要进行oauth2安全认证第三方应用授权登录比如QQ微博微信的授权登录。 步骤解读
第1步浏览器打开Gitee码云点击微信方式授权登录重定向到微信授权服务页面等待获取授权码
第2步用户打开手机登录微信扫描“二维码”点击“允许”授权将重定向到客户端Gitee应用提供的URI
第3步客户端Gitee使用上一步获取的授权码向微信授权服务器申请令牌Token
第4步微信授权服务器对客户端Gitee进行认证以后确认无误同意发放令牌
第5步客户端使用令牌向资源服务器微信申请获取资源
第6步资源服务器微信确认令牌无误后同意向客户端开放资源
角色
Third-party application第三方应用程序又称客户端client即例子中的Gitee。HTTP serviceHTTP服务提供商简称服务提供商即例子中的微信。Resource Owner资源所有者又称用户也就是你user。User Agent用户代理比如浏览器。Authorization server授权服务器即服务提供商专门用来处理认证授权的服务器。Resource server资源服务器即服务提供商存放用户生成的资源的服务器。它与授权服务器可以是同一台服务器也可以是不同的服务器。 OAuth的作用就是让客户端安全可控地获取用户的授权与服务提供商进行交互。 认证流程 A用户打开客户端以后客户端要求用户给予授权。
B用户同意给予客户端授权。
C客户端使用上一步获得的授权向认证服务器申请令牌。
D认证服务器对客户端进行认证以后确认无误同意发放令牌。
E客户端使用令牌向资源服务器申请获取资源。
F资源服务器确认令牌无误同意向客户端开放资源。 上面六个步骤之中B是关键即用户怎样才能给于客户端授权。有了这个授权以后客户端就可以获取令牌进而凭令牌获取资源。 令牌的特点
令牌又时效性一般是短期的且不能修改密码一般是长期有效的令牌可以由颁发者撤销且即时生效密码一般可以不用修改而长期有效令牌可以设定权限的范围且使用者无法修改 在使用令牌时需要保证令牌的保密令牌验证有效即可进入系统不会再做其他的验证。 OAuth2.0授权模式
客户端必须得到用户的授权authorization grant才能获得令牌access token。OAuth 2.0一共分成四种授权类型authorization grant
授权码模式authorization code简化模式implicit密码模式resource owner password credentials客户端模式client credentials
授权码模式和密码模式比较常用。
授权码模式
授权码authorization code方式指的是第三方应用先申请一个授权码然后再用该码获取令牌。
这种方式是最常用的流程安全性也最高它适用于那些有后端的 Web 应用。授权码通过前端传送令牌则是储存在后端而且所有与资源服务器的通信都在后端完成。这样的前后端分离可以避免令牌泄漏。
适用场景目前主流的第三方验证都是采用这种模式 主要流程
A用户访问客户端后者将前者导向授权服务器。
B用户选择是否给予客户端授权。
C用户给予授权授权服务器将用户导向客户端事先指定的重定向URIredirection URI同时附上一个授权码。
D客户端收到授权码附上早先的重定向URI向授权服务器申请令牌。这一步是在客户端的后台的服务器上完成的对用户不可见。
E授权服务器核对了授权码和重定向URI确认无误后向客户端发送访问令牌access token和更新令牌refresh token。
请求示例
A步骤客户端申请认证的URI
https://www.example.com/v1/oauth/authorize?response_typecodeclient_idCLIENT_IDredirect_uriCALLBACK_URLscopereadstatexxx参数说明
参数类型说明response_type授权类型必选项此处的值固定为codeclient_id客户端的ID必选项redirect_uri重定向URI认证服务器接受请求之后的调转连接可以根据这个连接将生成的授权码回传必选项scopecode发送给资源服务器申请的权限范围可选项state任意值认证服务器会原样返回,用于抵制CSRF(跨站请求伪造)攻击。
C步骤服务器回应客户端的URI
https://client.example.com/cb?codeSplxlOBeZQQYbYS6WxSbIAstatexxx参数说明
参数类型说明code授权码必选项。授权码有效期通常设为10分钟一次性使用。该码与客户端ID、重定向URI以及用户是一一对应关系。state原样返回客户端传的该参数的值
D步骤客户端向认证服务器申请令牌
https://www.example.com/v1/oauth/token?client_idCLIENT_IDclient_secretCLIENT_SECRETgrant_typeauthorization_codecodeAUTHORIZATION_CODEredirect_uriCALLBACK_URL参数说明
参数类型说明client_id表示客户端ID必选项client_secret表示安全参数只能在后端发请求grant_type表示使用的授权模式必选项此处的值固定为authorization_codecode表示上一步获得的授权码必选项redirect_uri表示重定向URI必选项且必须与A步骤中的该参数值保持一致
E步骤响应D步骤的数据
{ access_token:访问令牌, token_type:bearer, expires_in:过期时间, refresh_token:REFRESH_TOKEN, scope:read, uid:用户ID,info:{...}
}参数说明
参数类型说明access_token访问令牌必选项token_type令牌类型该值大小写不敏感必选项expires_in过期时间单位为秒。如果省略该参数必须其他方式设置过期时间refresh_token更新令牌用来获取下一次的访问令牌可选项scope权限范围如果与客户端申请的范围一致此项可省略
**简化(隐式)**模式
有些 Web 应用是纯前端应用没有后端。必须将令牌储存在前端。RFC 6749 就规定了第二种方式允许直接向前端颁发令牌这种方式没有授权码这个中间步骤所以称为授权码“隐藏式”implicit
简化模式不通过第三方应用程序的服务器直接在浏览器中向授权服务器申请令牌跳过了授权码这个步骤所有步骤在浏览器中完成令牌对访问者是可见的且客户端不需要认证。
这种方式把令牌直接传给前端是很不安全的。因此只能用于一些安全要求不高的场景并且令牌的有效期必须非常短通常就是会话期间session有效浏览器关掉令牌就失效了。 A客户端将用户引导向认证服务器。
B用户决定是否给于客户端授权。
C假设用户给予授权认证服务器将用户导向客户端指定的”重定向URI并在URI的Hash部分包含了访问令牌。
D浏览器向资源服务器发出请求其中不包括上一步收到的Hash值。
E资源服务器返回一个网页其中包含的代码可以获取Hash值中的令牌。
F浏览器执行上一步获得的脚本提取出令牌。
G浏览器将令牌发给客户端。
密码模式
如果你高度信任某个应用RFC 6749 也允许用户把用户名和密码直接告诉该应用。该应用就使用你的密码申请令牌这种方式称为密码式password。
在这种模式中用户必须把自己的密码给客户端但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下比如客户端是操作系统的一部分或者由一个著名公司出品。而授权服务器只有在其他授权模式无法执行的情况下才能考虑使用这种模式。
适用场景公司搭建的授权服务器 A用户向客户端提供用户名和密码。
B客户端将用户名和密码发给认证服务器向后者请求令牌。
C认证服务器确认无误后向客户端提供访问令牌。
客户端模式
客户端模式Client Credentials Grant指客户端以自己的名义而不是以用户的名义向服务提供商进行 授权。
**适用于没有前端的命令行应用即在命令行下请求令牌。**一般用来提供给我们完全信任的服务器端服务。 A客户端向认证服务器进行身份认证并要求一个访问令牌。
B认证服务器确认无误后向客户端提供访问令牌。