zoukankan      html  css  js  c++  java
  • 对OAuth协议的认识

    一. OAuth是什么

       OAuth 是Open Authorization的简写。OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。

    通俗地说,就是当我们想把自己系统的某些功能暴露给第三方系统进行调用,并且需要对第三方系统的调用设置一定的访问权限。

    这样一来这两个系统的开发人员之间就得做系统的对接,

    但如果本方系统按照OAUTH协议的标准进行了相应的实现,那么这个对接的过程就不需要双方进行额外沟通。调用方只要按照标准的实现进行对接就可以了。

    OAuth协义有两个版本1.0 和 2.0 ,2.0 相对比较简洁是目前比较流行的做法。OAuth具体的实现细节大致如下:

      1. 由本方系统向第三方系统提供公钥和clientId

      2. 第三方系统的某次访问以http形式携带公钥和clientId访问本方系统的OAuth授权中心

      3.授权中心将对合法的请求返回一个授权code

      4.第三方再携带code再次访问授权中心用code去换取令牌,这个过程应走https的加密通道

      5. 获得令牌后,就可以携带令牌访问本方系统开放给第三方系统的API服务了

    二. OAuth和SSO单点登录的区别

      OAuth2解决的是服务提供方(微信等)给第三方应用授权的问题,而sso解决的是大型系统中各个子系统如何共享登陆状态的问题。
    两者都是基于分布式系统,涉及到多个角色,但是不同的是,OAuth2是一种具体的协议,sso可以说是一种技术,可以用cookie实现,

    甚至也可以用OAuth2实现(虽然不是很好),比如OAuth中的服务提供方可以充当sso认证中心,OAuth中的第三方应用也可以是sso中的子系统。

    三.在微服务中何时可以考虑使用OAuth认证

    除非要把自己系统的功能暴露给第三方访问(即暴露自己的注册中心),且不需要双方进行额外沟通,本方才需要实现OAuth2授权

    四.实现微信帐号登录自己系统的原理

    此时微信一方应实现OAuth2授权,我们的系统通过调用微信的授权获得令牌,然后用令牌去访问微信的相关接口(例如获取用户名等等)来实现微信用户在本方系统的登录和访问。

    五. OAuth应用的场景

    1. 有的系统希望第三方系统的用户也可以访问他的系统,以提升访问流量。

         例如:我们开发的一套系统,希望微信或者QQ的用户能够无需注册就能登录访问我们的系统,这需要借助微信或者QQ提供的OAuth的API完成授权验证,然后访问微信或者QQ的公开的API获到用户信息,然后就可以让微信或者QQ的用户访问我们的系统。因为通过微信或者QQ的OAuth接口的验证,我们是可以信任这些用户的,并且也获取到了这些用户的信息。

    2. 不同的系统之间的功能协作

         例如:一个用户同时是两个系统(系统A和系统B)的用户,现在A系统有一个功能,希望是调用B系统某个功能来协助完成的。比如有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。

    参考资料:

    http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

    http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

  • 相关阅读:
    详解consul的安装和配置
    vs2017
    Android Bitmap 和 ByteArray的互相转换
    android中的byte数组转换(转)
    TensorFlow编译androiddemo
    Linux下命令行安装配置android sdk
    Warning: cast to/from pointer from/to integer of different size
    scribe 搭建遇到的问题
    参数依赖查找(ADL,Argument-dependent lookup)
    模板类继承后找不到父类函数的问题
  • 原文地址:https://www.cnblogs.com/hzhuxin/p/10462782.html
Copyright © 2011-2022 走看看