• OAuth


    OAuth的英文全称是Open Authorization,它是一种开放授权协议。OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和2010年4月的2.0版,1.0版本存在严重安全漏洞,而2.0版解决了该问题。

    OAuth是令牌代替用户密码访问应用的又一标准;其他还是有SSO;

    授权模式:

      1、授权码模式(Authorization Code)(正统方式)(支持refresh token)

      2、授权码简化模式(Implicit)(为web浏览器设计)(不支持refresh token)

      3、Pwd模式(Resource Owner Password Credentials) (基本不用)(支持refresh token)

      4、Client模式(Client Credentials) (为后台api调用设计)(不支持refresh token)

      5、扩展模式(Extension)(自定义模式,这个就不介绍了)

    1、OAuth2.0最典型的授权码认证方式:

      资源服务器和鉴权服务器都是属于资源所有方,也就是最终的服务提供方,第三接入方需要先与鉴权服务器申请合作获取客户编码。

      对于资源服务器来说,需要做的是

        1、 accessToken和clientId的校验

        2、 token校验通过后要对token访问权限做好限制

      对于鉴权服务器来说,需要做的是

        1、 接受第三方应用的申请,维护clientId

        2 、提供登入页面,做用户、密码鉴权

        3、 授权码生成和验证

        4 、token的生成

        5 、clientId、token的维护,一般clientId入库,token入内存

      OAuth2.0解决的是通过令牌获取某个系统的操作权限,因为有clientId的标识,一次登陆只能对该系统生效,第三方应用的操作用户不是鉴权系统的官方用户,授权权限鉴权中心可以做限制。

    2、授权码简化模式,省略了1中客户端获取code然后交换token的过程,授权访问后页面将被重定向到redirect_uri并带有令牌

      授权访问:http://localhost:8080/oauth2/authorize?response_type=token&client_id=testid&redirect_uri=http://localhost/OAuth&scope=read

      授权之后页面将被重定向到redirect_uri并带有令牌:http://localhost/OAuth/#access_token=111111111&token_type=bearer&expires_in=3600

    3、Pwd模式请求格式:POST -D "http://localhost/oauth/token?grant_type=password&username=aaa&password=123456&scope=read,write" 

      服务器返回来的访问令牌:

    {
      "access_token""9cd23bef-ae56-46b0-82f5-b9a8f78da569",
      "token_type""bearer" ,
      "expires_in"43199 ,
      "scope""read"
    }

    吃鸡练习

    在使用微信授权之前,吃鸡游戏需要先在微信开放平台上注册应用,填写自己的名称、logo、用途等信息,微信开放平台颁发给吃鸡游戏一个应用 ID 和叫 APP Secret 的密钥,在实际对接中,会使用到这两个参数。

    创建应用成功后就将获得应用 ClientId 和叫APP Secret 密钥

    以下是授权流程

    1、用户点击登录按钮

    2、页面自动跳转到初始参数中redirect_uri 定义的那个URL,并自动在 URL 末尾添加一个 code 参数

    3、吃鸡游戏通过上一步获取的 code 参数换取 Token,Token 就是前文中说到的信用凭证

      要包含以下参数:

      1、client_id:在微信开放平台申请的应用 ID

      2、client_secret:在微信开放平台申请时提供的APP Secret

      3、grant_type:需要填写authorization_code

      4、code:上一步获得的 code

      5、redirect_uri:回调地址,需要与注册应用里的回调地址以及第一步的 redirect_uri 参数一致

    4、通过第3步的请求,接口返回 Token 和相关数据:

      

    {
     "access_token": "ACCESS_TOKEN",//Token 的值
     "expires_in": 1234,//过期时间
     "uid":"122222"//当前授权用户的UID。
    }

    5、在第4步中获取了access_token ,使用它,就可以去获取用户的资源了

    6、最后一步,微信返回用户信息,吃鸡游戏进行处理,整个流程结束。

    通过以上的方式,在微信和吃鸡游戏中间建立了一个独立的权限层,这个权限由用户赋予,可以被用户随时取消,不同第三方应用之间相互独立,互不干扰,这样就彻底解决了明文存放账号密码的问题。

     参考图

    注意:

      1、code时效较短,多为10s-10min,每次获得的code仅可使用一次,且code与client_id和redirect_uri有 一一对应关系。

      2、access token 有过期时间,多为10-15天。(过期处理有2种,请求用户重新授权/refreshToken,一般多用重新授权。)

      3、在请求时,参数中包含重定向地址的,需要和第三方在授权方平台报备时留的地址前部一致

    参考:

      OAuth 2.0 的四种方式

      GitHub OAuth 第三方登录示例教程

      

  • 相关阅读:
    移动端性能优化动态加载JS、CSS
    右侧跟踪导航
    JQ+rotate插件实现图片旋转,兼容IE7+ CHROME等浏览器
    什么JSONP
    Web前端开发:什么是页面重回(repaints)与回流(reflow)
    javascript中的eval()函数应用以及要点
    SQL表值参数批量插入
    SQL SERVER 使用 OPENRORWSET(BULK)函数将txt文件中的数据批量插入表中(2)
    SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
    一个编程菜鸟的进阶之路(C/C++)
  • 原文地址:https://www.cnblogs.com/hofmann/p/10846310.html
Copyright © 2020-2023  润新知