• OAuth2.0 授权的四种方式


    四种方式:

    • 授权码模式(grant_type--->authorization_code
    • 简化模式(response_type--->token
    • 密码模式(grant_type--->password
    • 客户端模式(grant_type--->client_credentials

    适用场景

    • 授权码模式:安全性高,使用率高,流程复杂。要求第三方应用必须有服务器。对安全性要求较高,web项目中一般使用授权码模式。
    • 简化模式:流程简单;适用于纯前端应用,不安全。Token有效期短,浏览器关闭即失效
    • 密码模式:需要输入账号密码,极度不安全,需要高度信任第三方应用适用于其他授权模式都无法采用的情况;原生APP可以使用,web不建议使用
    • 客户端模式:授权维度为应用维度,而不是用户维度。因此有可能多个用户共用一个Token的情况。适用于应用维度的共享资源。适用于服务器之间交互,不需要用户参与。

    一、授权码模式

    1、授权码模式介绍

    (1)资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。如:
      Get请求:
    http://localhost:53020/uaa/oauth/authorize?client_id=c1&response_type=code&scope=ROLE_ADMIN&redirect_uri=http://www.baidu.com
    参数列表如下:
    • client_id:客户端准入标识。
    • response_type:授权码模式固定为code。
    • scope:客户端权限。
    • redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。
    (2)浏览器出现向授权服务器授权页面,之后将用户同意授权。
    (3)授权服务器将授权码(AuthorizationCode)转经浏览器发送给client(通过redirect_uri)
    (4)客户端拿着授权码向授权服务器索要访问access_token,请求如下: 
      Post请求:
    localhost:53020/uaa/oauth/token
    参数列表如下
    • client_id:客户端准入标识。
    • client_secret:客户端秘钥。
    • grant_type:授权类型,填写authorization_code,表示授权码模式
    • code:授权码,就是刚刚获取的授权码,注意:授权码只使用一次就无效了,需要重新申请。
    • redirect_uri:申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致。

    请求示例:grant_type--->authorization_code

    响应成功示例:

    (5)授权服务器返回令牌(access_token)
      这种模式是四种模式中最安全的一种模式。一般用于client是Web服务器端应用或第三方的原生App调用资源服务
    的时候。因为在这种模式中access_token不会经过浏览器或移动端的App,而是直接从服务端去交换,这样就最大
    限度的减小了令牌泄漏的风险。 

    二、简化模式 

    (1)资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。如:
      Get请求:response_type--->token
    http://localhost:53020/uaa/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com
      参数描述同授权码模式 ,注意response_type=token,说明是简化模式。
    (2)浏览器出现向授权服务器授权页面,之后将用户同意授权。
    (3)授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向uri的fargment中发送给浏览器。
    响应成功示例:

    三、密码模式 

    (1)资源拥有者将用户名、密码发送给客户端
    (2)客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),请求如下:
      Post请求:
    localhost:53010/uaa/oauth/token
    参数列表如下:
    • client_id:客户端准入标识。
    • client_secret:客户端秘钥。
    • grant_type:授权类型,填写password表示密码模式
    • username:资源拥有者用户名。
    • password:资源拥有者密码。
    (3)授权服务器将令牌(access_token)发送给client
      这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。
    请求示例:grant_type--->password

     响应成功示例:

    四、客户端模式

    (1)客户端向授权服务器发送自己的身份信息,并请求令牌(access_token)
    (2)确认客户端身份无误后,将令牌(access_token)发送给client,请求如下: 
      Post请求
    localhost:53020/uaa/oauth/token
    参数列表如下:
    • client_id:客户端准入标识。
    • client_secret:客户端秘钥。
    • grant_type:授权类型,填写client_credentials表示客户端模式
    这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。

    请求示例:grant_type--->client_credentials

    响应成功示例:

     

     
    作者:donleo123
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
    网络监控工具 iftop dstat
    可进行组合的枚举
    查看Qt自带的QSS
    通过文件设置QSS
    QString转QByteArray
    error: jump to case label
    error: static member function cannot have cv-qualifier
    C++ std::vector的大小和容量
    获取QMessageBox返回值
  • 原文地址:https://www.cnblogs.com/donleo123/p/14524801.html
Copyright © 2020-2023  润新知