• 第三方与OAuth协议


    1. OAuth是什么?

    OAuth (开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如 照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

    2. Oauth1.0与Oauth2.0的区别

    Ⅰ.Oauth1.0与Oauth2.0是相互不兼容的,所以他们为我们提供了不同的授权方式:

    2.0的用户授权过程有3步:

    A)用户到授权服务器,请求授权,然后返回授权码(AuthorizationCode)

    B)客户端由授权码到授权服务器换取访问令牌(access token)

    C)用访问令牌去访问得到授权的资源、

    总结:获取授权码(Authorization Code)—>换取访问令牌(access_token)—>访问资源:

    1.0的授权分4步,

    A)客户端到授权服务器请求一个授权令牌(requesttoken&secret)

    B)引导用户到授权服务器请求授权

    C)用访问令牌到授权服务器换取访问令牌(accesstoken&secret)

    D)用访问令牌去访问得到授权的资源

    总结:请求授权令牌(request token&secret)—>换取访问令牌(access token&secret)—>访问资源

    Ⅱ.1.0协议每个token都有一个加密,2.0则不需要。这样来看1.0似乎更加安全,但是2.0要求使用https协议,安全性也更高一筹。

    Ⅲ.2.0充分考虑了客户端的各种子态,因而提供了多种途径获取访问令牌,有:授权码、

    客户端私有证书、资源拥有者密码证书、刷新令牌等方式,而且验证过程更为简洁。

    相比之下 1.0只有一个用户授权流程。


    3. OAuth2.0 --- 四种授权模式

    3-1. 隐式授权模式(Implicit Grant)

    img

    • 第一步:用户访问页面时,重定向到认证服务器。
    • 第二步:认证服务器给用户一个认证页面,等待用户授权。
    • 第三步:用户授权,认证服务器想应用页面返回Token
    • 第四步:验证Token,访问真正的资源页面

    img

    3-2. 授权码授权模式(Authorization code Grant)

    img

    • 第一步:用户访问页面
    • 第二步:访问的页面将请求重定向到认证服务器
    • 第三步:认证服务器向用户展示授权页面,等待用户授权
    • 第四步:用户授权,认证服务器生成一个code和带上client_id发送给应用服务器
    • ​ 然后,应用服务器拿到code,并用client_id去后台查询对应的client_secret
    • 第五步:将code、client_id、client_secret传给认证服务器换取access_token和
    • ​ refresh_token
    • 第六步:将access_token和refresh_token传给应用服务器
    • 第七步:验证token,访问真正的资源页面

    img

    案例Github自取:https://github.com/PinkPig-cq/springSecurityoAuth

    3-3. 密码模式(Resource Owner Password Credentials Grant)

    img

    • 第一步:用户访问用页面时,输入第三方认证所需要的信息(QQ/微信账号密码)
    • 第二步:应用页面那种这个信息去认证服务器授权
    • 第三步:认证服务器授权通过,拿到token,访问真正的资源页面

    优点:不需要多次请求转发,额外开销,同时可以获取更多的用户信息。(都拿到账号密码了)

    缺点:局限性,认证服务器和应用方必须有超高的信赖。(比如亲兄弟?)

    应用场景:自家公司搭建的认证服务器

    3-4. 客户端凭证模式(Client Credentials Grant)

    img

    • 第一步:用户访问应用客户端
    • 第二步:通过客户端定义的验证方法,拿到token,无需授权
    • 第三步:访问资源服务器A
    • 第四步:拿到一次token就可以畅通无阻的访问其他的资源页面。

    这是一种最简单的模式,只要client请求,我们就将AccessToken发送给它。这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。

    因此这种模式一般用来提供给我们完全信任的服务器端服务。在这个过程中不需要用户的参与。

    总结:

    1. 三方登录时基于 Oauth2.0协议来完成

    2. 什么是Oauth, Oauth1.0与Oauth2.0的区别

    3. Oauth 2.0的四种授权模式

  • 相关阅读:
    批量新增百万条数据 十百万条数据
    sqlserver 组内排序
    EF ++属性会更新实体
    Entity Framework Core: A second operation started on this context before a previous operation completed
    abp Cannot access a disposed object. A common cause of this error is disposing
    abp xunit Can not register IHostingEnvironment. It should be a non-abstract class. If not, it should be registered before.”
    hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)
    EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
    datatable to entiy list 不支持可空类型和枚举类型
    webapi 设置不显示接口到swaggerUI
  • 原文地址:https://www.cnblogs.com/chao460/p/13934070.html
Copyright © 2020-2023  润新知