zoukankan      html  css  js  c++  java
  • OAuth2的学习小结

    OAUTH2核心参数说明

    grant_type参数说明表格:

    grant_type

    说明

    authorization_code

    标准的Server授权模式

    password

    基于用户密码的授权模式

    client_credentials

    基于APP密钥的授权模式

    refresh_token

    刷新accessToken

    response_type参数说明表格:

    response_type

    说明

    code

    标准的Server授权模式响应模式

    token

    脚本的授权响应模式,直接返回token,需要对回调进行校验

    OAUTH2各种请求流程

    Authorization Code(标准请求流程,必须实现)

    标准的的Server授权模式,与目前开放平台的Session机制很像。

    APP首先发送获取code请求

    GET /authorize?response_type=code&client_id=s6BhdRkqt3&

             redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

         Host: server.example.com

    容器返回code

    HTTP/1.1 302 Found

         Location: https://client.example.com/cb?code=i1WsRn1uB1

    APP根据code发送获取token请求

    POST /token HTTP/1.1

         Host: server.example.com

         Content-Type: application/x-www-form-urlencoded

         grant_type=authorization_code&client_id=s6BhdRkqt3&

         client_secret=gX1fBat3bV&code=i1WsRn1uB1&

         redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

    容器直接返回token

         HTTP/1.1 200 OK

         Content-Type: application/json

         Cache-Control: no-store

         {

           "access_token":"SlAV32hkKG",

           "token_type":"example",

           "expires_in":3600,

           "refresh_token":"8xLOxBtZp8",

           "example_parameter":"example-value"

         }

    Implicit Grant(直接发放模式)

    适用于运行于浏览器中的脚本应用,需要校验callback地址,而且只返回该应用注册的回调地址

    APP直接请求token

    GET /authorize?response_type=token&client_id=s6BhdRkqt3&

             redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

         Host: server.example.com

    容器通过重定向返回token

    HTTP/1.1 302 Found

         Location: http://example.com/rd#access_token=FJQbwq9&

                   token_type=example&expires_in=3600

    Resource Owner Password Credentials (基于用户名与密码模式)

    称之为用户名密码模式,需要提供终端用户的用户名和密码,适用于比如操作系统或者高权限的应用。

    APP直接带上用户名和密码请求

    POST /token HTTP/1.1

         Host: server.example.com

         Content-Type: application/x-www-form-urlencoded

         grant_type=password&client_id=s6BhdRkqt3&

         client_secret=47HDu8s&username=johndoe&password=A3ddj3w

    容器直接返回token

         HTTP/1.1 200 OK

         Content-Type: application/json

         Cache-Control: no-store

         {

           "access_token":"SlAV32hkKG",

           "token_type":"example",

           "expires_in":3600,

           "refresh_token":"8xLOxBtZp8",

           "example_parameter":"example-value"

         }

    Client Credentials

    基于APP的密钥直接进行授权,APP的权限非常大,慎用。这个模式可以考虑用于目前我们不需要弹出授权的特殊应用,如淘江湖,前端插件等。

    APP直接根据客户端的密码来请求

    POST /token HTTP/1.1

         Host: server.example.com

         Content-Type: application/x-www-form-urlencoded

         grant_type=client_credentials&client_id=s6BhdRkqt3&

         client_secret=47HDu8s

    容器直接返回token

    HTTP/1.1 200 OK

         Content-Type: application/json

         Cache-Control: no-store

         {

           "access_token":"SlAV32hkKG",

           "token_type":"example",

           "expires_in":3600,

           "refresh_token":"8xLOxBtZp8",

           "example_parameter":"example-value"

         }

    优先考虑实现的流程

    Authorization Code为我们需要优先支持的流程,很多开源的OAUTH实现都是优先实现了该授权流程。ETAO的B2C网站会用这个流程与开放平台交互。

     

    开源实现

    目前OAUTH 2有比较多的开源实现,其中比较好的开源实现是OAuth for Spring Security,大家可以参考http://static.springsource.org/spring-security/oauth/tutorial.html这个网址去具体了解。有兴趣的同学可以去这个网址去下载其源代码看看http://maven.springframework.org/milestone/org/springframework/security/oauth/spring-security-oauth/1.0.0.M2/spring-security-oauth-1.0.0.M2-sources.jar ,容器主要关注下面几个类:org.springframework.security.oauth2.provider.OAuth2AuthorizationFilter

    org.springframework.security.oauth2.provider. DefaultOAuth2GrantManager

    org.springframework.security.oauth2.provider.verification.VerificationCodeFilter

    第一个和第二个类为参数校验和参数解析,第三个类为响应生成的类。

    TIP主要关注下面的类:

    org.springframework.security.oauth2.provider.OAuth2ProtectedResourceFilter

    这个类主要实现了对AccessToken的校验

    详细的例子请访问:http://git.oschina.net/shengzhao/spring-oauth-server

    一只混迹在规划圈的giser,喜欢数据分析和模型
  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/giserliu/p/4372455.html
Copyright © 2011-2022 走看看