`
netment
  • 浏览: 58812 次
文章分类
社区版块
存档分类
最新评论

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实现都是优先实现了该授权流程。ETAOB2C网站会用这个流程与开放平台交互。

 

 

 

 

开源实现

目前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的校验

  • 大小: 51.5 KB
分享到:
评论
4 楼 monkeyk 2015-03-03  
3 楼 百威 2012-07-14  
给个例子吧,研究一下
2 楼 chengshuhui 2012-05-07  
有没有例子代码呢?
1 楼 lunzi 2011-07-28  
有没有例子代码呢?

相关推荐

    Spring Cloud 集成OAuth2实现身份认证和单点登录

    通过学习这些示例,你可以了解到如何定义OAuth2的客户端、如何配置授权服务器和资源服务器,以及如何在实际应用中实现SSO。 总结来说,Spring Cloud结合OAuth2提供了强大的安全机制,可以有效地管理和控制微服务的...

    springcloud-oauth2-security.rar

    总结,通过Spring Cloud Security和OAuth2,我们可以轻松地在微服务环境中实现安全的授权和访问控制。这个示例提供了实际操作的起点,帮助开发者快速理解和实践OAuth2认证机制。通过学习和实践,你可以更好地理解...

    spring security oauth2 实现的SSO单点登录案例.rar

    总结来说,这个案例将指导你如何使用Spring Security OAuth2搭建一个完整的SSO系统,包括认证服务器的设置、客户端应用的配置以及OAuth2流程的实现。通过学习这个案例,你可以深入理解SSO的工作原理,并能够将其应用...

    oauth2简单demo

    总结,这个"oauth2-sso"项目提供了一个基础的OAuth2和SSO实现,涵盖了授权服务器和客户端的互动,展示了如何在实际应用中安全地获取和使用访问令牌。通过这个DEMO,开发者可以学习OAuth2的基本工作原理,并将其应用...

    Python-sanction一个超级简单的OAuth2客户端实现

    **Python制裁(Sanction):超简易OAuth2客户端实现** 在现代互联网开发中,权限管理和身份验证已经成为不可或缺的一部分。OAuth2是一种广泛采用的...对于初学者来说,这是一个很好的学习OAuth2和Python库开发的案例。

    Java的oauth2.0 服务端与客户端的实现(源码)

    OAuth 2.0 是一个授权框架,用于安全地允许第三方应用访问用户的数据,而无需共享用户的...在`oauthserver`和`oauthclient01`这两个Maven项目中,你可以看到实际的代码实现,这将有助于深入学习和实践OAuth 2.0的使用。

    oauth 2 安卓使用

    OAuth 2.0 是一种广泛使用的授权框架,它允许第三方应用安全地访问用户在另一服务上的资源,而无需获取用户的账号密码。在安卓平台上,OAuth 2.0 的实现...通过分析 `oauth_使用demo`,你可以深入学习并实践这些概念。

    spring-cloud-gateway-oauth2

    总结起来,Spring Cloud Gateway整合OAuth2是提升微服务安全性的重要手段,而采用Nacos作为配置中心和注册中心,则有助于简化系统管理,提高服务的可靠性。这两者的结合,为构建高效、安全的分布式系统提供了强大的...

    Laravel开发-oauth2-server-laravel

    **Laravel 开发中的 OAuth2 服务器实现** OAuth2 是一个授权框架,广泛应用于...这个开源项目 "Laravel开发-oauth2-server-laravel" 提供了一个完整的实现示例,对于学习和实践Laravel OAuth2集成具有很高的参考价值。

    spring-boot-oauth2-mybatis:Spring Boot 1.5 + OAuth2 + MyBatis 3

    总结,"spring-boot-oauth2-mybatis"项目展示了如何利用Spring Boot 1.5的便捷性,结合OAuth2的安全特性,以及MyBatis的灵活数据访问,构建一个高效、安全的Web应用。这个项目为学习和实践这些技术提供了很好的参考...

    fxos-oauth2-jquery-demo:Firefox OS 的 OAuth2 OAuth3 示例

    总结来说,"fxos-oauth2-jquery-demo"项目提供了一个实际操作的平台,帮助开发者学习和掌握在Firefox OS环境下使用OAuth2进行授权,同时可能也涉及了对OAuth3的探索。通过分析和实践这个项目,开发者能够提升在Web...

    使用spring oauth2框架获取当前登录用户信息的实现代码

    描述中提到本文主要介绍了使用 Spring Oauth2 框架获取当前登录用户信息的实现代码,并通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。这表明文章的主要内容...

    oauth权限管理代码示范

    总结,OAuth在微服务分布式架构中起到了关键的权限管理和安全控制作用。通过理解OAuth的原理和流程,开发者可以更好地设计和实现安全的分布式系统。"quanxian"文件夹的代码提供了实战学习的机会,通过深入研究这些...

    grpc 实现oauth ssl

    总结来说,gRPC、OAuth和SSL的结合使用能为你的服务提供强大的安全性和可扩展性。通过正确配置SSL以保证通信安全,利用OAuth2进行身份验证,你可以为用户提供安全的API访问,同时保护你的系统免受潜在威胁。在实践中...

    oauth的demo

    总结来说,OAuth 2.0是一种强大的授权机制,这个“oauth的demo”为我们提供了直观的学习材料,帮助我们掌握OAuth的工作原理,以及如何在实际项目中应用和实现这一机制。通过深入研究这个demo,开发者可以更好地理解...

    新浪微博上传图片、OAuth认证

    总结来说,理解OAuth认证机制是进行微博应用开发的基础,而上传图片则是常见的用户交互功能。通过OAuth认证,应用可以安全地代表用户进行操作,如发布信息、分享图片等,从而提升用户体验。在实际开发过程中,需要...

    oauth2.0例子

    总结来说,这个"oauth2.0例子"为我们提供了一个实践OAuth 2.0授权和SSO功能的平台。通过分析和理解tonr和sparklr项目的源代码,我们可以更深入地学习OAuth 2.0的工作原理,以及如何在实际应用中实现鉴权和单点登录。...

    moauth-wellknown:知名oauth2服务配置和方法

    《OAuth2服务配置与方法详解——以moauth-well...通过学习和实践,我们可以利用OAuth2的授权机制,以及moauth-wellknown的便利性,创建更加安全、易用的互联网应用。同时,也要时刻关注安全问题,确保用户数据的安全。

    ASP.NET Web API与Owin OAuth 密码模式 持久化 VS2015

    ASP.NET Web API与Owin OAuth密码模式是现代Web应用程序中常用的身份验证...这对于学习和理解OAuth2.0在实际项目中的应用非常有帮助。开发者可以在此基础上进行扩展,添加更多的安全性和功能,以适应不同的应用场景。

    java对微信的OAuth2.0网页授权进行访问授权

    总结,Java实现微信OAuth2.0网页授权涉及多个步骤,需要理解OAuth2.0协议,掌握HTTP请求的发送与处理,以及JSON数据的解析。在实际开发中,还需要考虑错误处理和安全性问题,确保服务的稳定性和用户数据的安全。通过...

Global site tag (gtag.js) - Google Analytics