zoukankan      html  css  js  c++  java
  • 公网API安全--OAuth认证

    之前写过一个基于签名的公网API访问安全控制,另一种方式是基于OAuth认证协议做安全控制。

    说明

    用户访问A客户端,使用B的服务及资源。B只有征得用户的授权,才允许A客户端使用B上用户的资源和服务。

    名词

    • 第三方客户端,A客户端。

    • 服务提供商,B服务。

    • 资源所有者,用户。

    • 用户代理,比如浏览器。

    • 认证服务器,B服务上用来提供认证的服务器。

    • 资源服务器,B服务上用来存储用户的资源的服务器。

    通过一个权限配置管理界面,业务方配置之后,获取appid,secret,redirect_url。

    • 通过授权获取授权码。

    • 通过授权码+appid+secret获取access_token。

    • 通过access_token操作api。

    OAuth在客户端与服务提供商之间,设置一个授权层。

    客户端不直接登陆服务提供商,只登陆授权层,以此将用户与客户端区分开。

    客户端登陆授权层所用的令牌,与用户的密码不同。用户可以在登陆的时候,指定授权层令牌的授权范围和有效期。

    客户端登陆授权层,服务提供商根据令牌的权限范围和有效期,向客户端开发对应服务。

    • 用户打开客户端,客户端要求用户给予授权。

    • 用户同意给予客户端授权。

    • 客户端使用上一步获取的授权,向认证服务器申请令牌。

    • 认证服务器对客户端进行认证后,确认无误,同意发放令牌。

    • 客户端使用令牌,向资源服务器申请获取资源。

    • 资源服务器确认令牌无误,同意向客户端开发资源。

    核心:用户给客户端授权,有了授权之后,客户端可以获取令牌,凭令牌获取资源。

    输入图片说明]

    参照URL:

    客户端授权:

    /authorize/app-connect?appid=APPID&redirect_url=xxx&response_type=code&state=xxx
    

    验证通过,授权服务器重定向到配置的REDIRECT_URL&code=xxx 授权码

    通过授权码获取access_token:

    /authorize/access-token?appid=APPID&secret=SECRET&code=授权码&grant_type=authorization_code
    

    验证通过,返回access_token,refresh_token,expires_in(过期时间戳)

    通过refresh_token更新access_token:

    /authorize/refresh-token?appid=APPID&grant_type=refresh_token&refresh_token=xxx
    

    验证通过,返回新的access_token,refresh_token,更新成功

  • 相关阅读:
    Spring学习(一)初识Spring
    搜索引擎学习(七)解析查询
    搜索引擎学习(六)Query的子类查询
    Oracle学习(十四)分表分区
    Oracle学习(十三)优化专题
    Python学习————流程控制之while循环
    Python学习————深浅copy
    Python学习————while循环作业
    Python学习————运算符
    Python学习————与用户交互
  • 原文地址:https://www.cnblogs.com/xiguain/p/7908326.html
Copyright © 2011-2022 走看看