• 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
     
    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    Delphi 10.1.2 berlin开发跨平台APP的几点经验
    (矫情)关于编程(能力第一,其它不要多想)
    Xdite:永葆热情的上瘾式学习法(套路王:每天总结自己,反省自己的作息规律,找到自己的幸运时间、幸运方法,倒霉时间、倒霉方法。幸运是与注意力挂钩的。重复才能让自己登峰造极,主动去掉运气部分来训练自己。游戏吸引自己的几个原因非常适合训练自己)good
    无锡美新赵阳:创业18年,一辈子做好一家企业(创业是一种生活方式;为了赚钱而创业,那是扯淡”。最重要的是做自己喜欢做的事情)
    Delphi中流对象的应用
    多样性的配置来源
    WeText项目的服务端
    集线器,交换机,路由器
    不知道的JavaScript
    IPerf网络测试工具
  • 原文地址:https://www.cnblogs.com/AduBlog/p/13597603.html
Copyright © 2020-2023  润新知