OAuth2.0系列之基本概念和运作流程(一)

@

目录

一、OAuth2.0是什么?

1.1 OAuth2.0简介

OAuth 2.0是现在最盛行的授权机制,用来授权第三方应用

OAuth是一种开放协议, 允许用户让第三方应用以平安且尺度的方式获取该用户在某一网站,移动或者桌面应用上存储的隐秘的资源(如用户个人信息,照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth 1.0协议(RFC5849)作为一个指导性文档公布,是一个小社区的事情功效。
本尺度化规范在OAuth 1.0的部署履历之上构建,也包罗其他使用案例以及从更普遍的IETF社区收集到的可扩展性需求。

OAuth 2.0协议不向后兼容OAuth 1.0。这两个版本可以在网络上共存,实现者可以选择同时支持他们。

1.2 OAuth2.0官方文档

官网:https://oauth.net/2/ ,官网只有英文版文档,您也可以参考翻译过来的文档,链接:OAuth2 RFC6749中文翻译

OAuth2.0在平安性方面做了比较大的提高,简朴来说OAuth2.0就是一种授权协议,可以用来授权,随意点个网站,如图这种网站,用户不想注册,就可以用微信、支付宝登录,就是场景是很常见的,也是OAuth2.0的应用
OAuth2.0系列之基本概念和运作流程(一)

二、OAuth2.0原理

OAuth2.0是一种授权机制,正常情形,不使用OAuth2.0等授权机制的系统,客户端是可以直接接见资源服务器的资源的,为了用户平安接见数据,在接见中心添加了Access Token机制。客户端需要携带Access Token去接见受到珍爱的资源。以是OAuth2.0确保了资源不被恶意客户端接见,从而提高了系统的平安性。

2.1 OAuth2.0流程图

引用官方图片先容OAuth2.0总体流程:
OAuth2.0系列之基本概念和运作流程(一)

  • (A)客户端向从资源所有者请求授权。
  • (B)客户端收到授权允许,资源所有者给客户端发表授权允许(好比授权码code)
  • (C)客户端与授权服务器举行身份认证并出示授权允许(好比授权码code)请求接见令牌。
  • (D)授权服务器验证客户端身份并验证授权允许,若有用则发表接见令牌(accept token)。
  • (E)客户端从资源服务器请求受珍爱资源并出示接见令牌(accept token)举行身份验证。
  • (F)资源服务器验证接见令牌(accept token),若有用则知足该请求。

三、 OAuth2.0的角色

OAuth2.0界说如下角色:

引用OAuth2 RFC6749中文翻译

  • 资源所有者(Resource Owner): 能够允许受珍爱资源接见权限的实体。当资源所有者是个人时,它作为最终用户被提及。
  • 用户署理(User Agent): 指的的资源拥有者授权的一些渠道。一样平常指的是浏览器、APP
  • 客户端(Client) 使用资源所有者的授权代表资源所有者提议对受珍爱资源的请求的应用程序。术语“客户端”并非特指任何特定的的实现特点(例如:应用程序是否在服务器、台式机或其他装备上执行)。
  • 授权服务器(Authorization Server): 在乐成验证资源所有者且获得授权后发表接见令牌给客户端的服务器。
    授权服务器和资源服务器之间的交互超出了本规范的局限。授权服务器可以和资源服务器是统一台服务器,也可以是星散的个体。一个授权服务器可以发表被多个资源服务器接受的接见令牌。
  • 资源服务器(Resource Server): 托管受珍爱资源的服务器,能够吸收和响应使用接见令牌对受珍爱资源的请求。

四、OAuth2.0授权模式

OAuth2.0有4种授权模式:

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

其中最常用的是授权码模式,4种授权模式的详细先容可以参考阮一峰先生的:OAuth 2.0 的四种方式

4.1 授权码模式(authorization code)

授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。

官网图片:
OAuth2.0系列之基本概念和运作流程(一)
从调接口方面,简朴来说:

  • 第一步:获取code:
    eg:oauthServer+”/oauth/authorize?client_id=”+clientId+”&response_type=code&redirect_uri=”+redirectUrl+”&scope=all”
    若是没有登录,则会跳转到统一身份认证登录页面。若是用户登录了,挪用接口后,会重定向到redirect_uri,授权码会作为它的参数

  • 第二步:获取access_token
    eg:oauthServer+”/oauth/token?code=”+code+”&grant_type=authorization_code&client_secret=”+clientSecret+”&redirect_uri=”+redirectUri+”&client_id=”+clientId

    CVE-2020-0796漏洞复现(RCE)

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODk1MzQ5NzMsInVzZXJfbmFtZSI6Im5pY2t5IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9hZG1pbiJdLCJqdGkiOiJmMjM0M2Q0NC1hODViLTQyOGYtOWE1ZS1iNTE4NTAwNTM5ODgiLCJjbGllbnRfaWQiOiJvYSIsInNjb3BlIjpbImFsbCJdfQ.LWkN2gC2dBrGTn5uSPzfdW6yRj7jhlX87EE8scY02hI",
    "token_type": "bearer",
    "expires_in": 59,
    "scope": "all",
    "user_name": "nicky",
    "jti": "f2343d44-a85b-428f-9a5e-b51850053988"
}
  • 第三步:接见系统资源,此时统一认证服务会凭据该认证客户端权限信息判断,决议是否返回信息。

接见:http://localhost:8084/api/userinfo?access_token=${accept_token}

4.2 简化模式(implicit grant type)

简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了”授权码”这个步骤,因此称简化模式

OAuth2.0系列之基本概念和运作流程(一)
从调接口方面,简朴来说:

  • 第一步:接见授权,要传client_id:客户端id,redirect_uri:重定向uri,response_type为token,scope是授权局限,state是其它自界说参数

http://localhost:8888/oauth/authorize?client_id=cms&redirect_uri=http://localhost:8084/callback&response_type=token&scope=read&state=123

  • 第二步:授权通过,会重定向到redirect_uri,access_token码会作为它的参数

http://localhost:8084/callback#access_token=${accept_token}&token_type=bearer&state=123&expires_in=120

  • 第三步:拿到acceptToken之后,就可以直接接见资源

http://localhost:8084/api/userinfo?access_token=${accept_token}

4.3 密码模式(resource owner password credentials)

密码模式中,用户向客户端提供自己的用户名和密码,这通常用在用户对客户端高度信托的情形

OAuth2.0系列之基本概念和运作流程(一)

从调接口方面,简朴来说:

  • 第一步:直接传username,password获取token

http://localhost:8888/oauth/token?client_id=cms&client_secret=secret&username=admin&password=123456&grant_type=password&scope=all

  • 第二步:拿到acceptToken之后,就可以直接接见资源

http://localhost:8084/api/userinfo?access_token=${accept_token}

4.4 客户端模式(client credentials)

客户端模式(client credentials)适用于没有前端的命令行应用,即在命令行下请求令牌

OAuth2.0系列之基本概念和运作流程(一)

从调接口方面,简朴来说:

http://localhost:8084/api/userinfo?access_token=${accept_token}

学习需要的理论知识后,照样实践一下才气明了整个流程,详情参考我OAuth2.0系列博客专栏:OAuth2.0系列博客,SpringBoot的参考我系列博客专栏:SpringBoot系列博客

五、优质参考资料

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/13573.html