• OAuth2.0 四种授权方式


    【什么是OAuth】

    OAth是一种授权机制。数据所有者授权第三方应用获取一定权限。数据所有者产生一个代替密码的令牌(token)供第三方应用使用。

    比方说,我想使用QQ快捷登录一个应用,但我又不想我的账号密码泄露。那么使用OAuth2.0我登录QQ验证了自己的身份,然后QQ便发送一个token给应用,

    应用登录。应用获取到token的同时,可能还会获得头像,昵称等(但密码不会泄露)

    【token与密码的区别】

    1.token是短期的,会过期,密码不修改不会过期

    2.token可撤销,密码只能修改不能撤销

    3.token有权限范围,他只能获取一定权限,而密码则是所有

    【四种授权方式】

    一.授权码

    第三方应用首先申请一个授权码,通过授权码获取相关权限

    步骤:

    1.A网站提供一个B网站的链接让用户登录

    https://b.com/oauth/authorize?
      response_type=code&
      client_id=CLIENT_ID&
      redirect_uri=CALLBACK_URL&
      scope=read
    redirect_uri表示登录之后跳转的页面,
    client_id表示请求对象
    code表示是以授权码的形式
    scope表示授权范围(只读)

    2.用户在B网站登录之后,返回授权码

    https://a.com/callback?code=AUTHORIZATION_CODE

    code就是授权码

    3.A网站拿到授权码之后就可以向B网站发送请求,获取令牌

    https://b.com/oauth/token?
     client_id=CLIENT_ID&
     client_secret=CLIENT_SECRET&
     grant_type=authorization_code&
     code=AUTHORIZATION_CODE&
     redirect_uri=CALLBACK_URL
    client_id和client_secret确认请求对象的身份
    grant_type表示认证方式是授权码
    code就是获取的授权码
    4.B网站接受请求在之后,就会以json形式发送token
    {    
      "access_token":"ACCESS_TOKEN",
      "token_type":"bearer",
      "expires_in":2592000,
      "refresh_token":"REFRESH_TOKEN",
      "scope":"read",
      "uid":100101,
      "info":{...}
    }

    access_token就是要获取的token

    二. 隐藏式

     不使用授权码(没有后端接收,只在前端),直接获取token

    步骤:

     1.A网站提供一个B网站的链接让用户登录

    https://b.com/oauth/authorize?
      response_type=token&
      client_id=CLIENT_ID&
      redirect_uri=CALLBACK_URL&
      scope=read

    直接让响应的类型为token

    2.登录成功之后跳转A网站

    https://a.com/callback#token=ACCESS_TOKEN

    这里token在URL锚点位置,而不是和上面一样附在请求头。因为锚点不会发送到服务器

    但这样不安全,因为直接返回到前端,显示在锚点上面

    三. 密码式

    直接使用你的账号密码申请token

     1.A网站提供一个B网站的链接让用户登录

    https://oauth.b.com/token?
      grant_type=password&
      username=USERNAME&
      password=PASSWORD&
      client_id=CLIENT_ID

     2.直接获取token,这里没有跳转,拿到token之后以json的形式使用http回应

    必须对应用高度信任

    四. 凭证式

    试用于没有前端的应用

    步骤:

    1.A应用向B发送请求

    https://oauth.b.com/token?
      grant_type=client_credentials&
      client_id=CLIENT_ID&
      client_secret=CLIENT_SECRET

    2.验证通过之后,直接返回令牌

    针对第三方应用,共用token

    拿到token之后以后向B网站请求数据都必须在请求头带上token,

    curl -H "Authorization: Bearer ACCESS_TOKEN" 

    【更新token】

    方法:向B网站请求两个token,一个用于登录,一个用于更新

    https://b.com/oauth/token?
      grant_type=refresh_token&
      client_id=CLIENT_ID&
      client_secret=CLIENT_SECRET&
      refresh_token=REFRESH_TOKEN
     
    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    PAT 1005. 继续(3n+1)猜想 (25)
    PAT 1004. 成绩排名 (20)
    android小游戏 飞机躲子弹
    PAT 1004. 成绩排名 (20) JAVA
    PAT 1003. 我要通过!(20) JAVA
    PAT 1003. 我要通过!(20)
    PAT 1002. 写出这个数 (20)
    NEERC, Northern Subregional Contest 2012 B 乱搞or搜索
    SGU 167 未解 dp
    Bucharest, Romania 2013 A Russian Dolls 贪心
  • 原文地址:https://www.cnblogs.com/AduBlog/p/13597603.html
Copyright © 2020-2023  润新知