`
hevanwang
  • 浏览: 112224 次
社区版块
存档分类
最新评论

Oauth2.0 用Spring-security-oauth2 非常简单

 
阅读更多

 上周,我想开发OAuth 2.0的一个实例。我检查了Spring-security-Oauth2.0的样例,OAuth 2提供商sparklr2和OAuth 2客户端TONR 。我探索在互联网上了一下,整理相关文档。编译并运行了OAuth 2提供商sparklr2和OAuth 2客户端TONR,并检查所有的授权上。现在,我在这里从实用的角度讲解的OAuth 2.0的不同方面来理解Spring-security-Oauth2.0


这篇文章是试图描述的OAuth 2.0以简化的形式来帮助开发商和服务提供商实施的协议。

我将涵盖以下主题在这篇文章中。

1 。实体
2 。创建应用程序
3 。授权, Grant-Type
                   a.
Web服务器应用程序(Web Server)
                   b.
基于浏览器的应用程序(Web Client)
                   c.
手机应用程序(Mobile APP)
                   d.其它桌面应用程序

4 。访问资源
5 。资源


OAuth2.0流程:




OAuth的服务器:
这也被称为OAuth的提供者。它的整体责任是验证和授权的用户/客户端和管理令牌。

第三方应用:
第三方应用程序俗称为客户端,将尝试获得访问用户的帐户。它需要从用户获得许可,才可以这样做。这可能是一个基于Web服务器的应用程序,基于浏览器的应用程序,桌面应用程序,手机/平板电脑应用程序或一些智能设备,如谷歌护目镜和智能电视。

资源服务器:
俗称为资源服务器的API ,从其中的数据会被提取出来或送达。这可能是SOAP或REST的基础服务提供商。

用户:
用户俗称为资源拥有者,谁可以访问访问资源。

创建应用程序:

在您开始OAuth的过程中,您必须先注册一个新的应用与服务/供应商。当注册一个新的应用程序,你通常注册基本信息,如应用程序克林特ID ,秘密,授权发放,类型等,另外,你必须注册一个重定向URI,用于将用户重定向到Web服务器,基于浏览器的,或移动应用程序。

重定向的URI :
该服务将只将用户重定向到注册的URI ,这有助于防止某些攻击。任何HTTP重定向的URI必须与SSL安全保护,因此该服务将只重定向到的URI以“https ”开头。这可以防止从令牌在授权过程中被截获。

客户端ID和授权密码:
注册您的应用程序后,你将拥有你的客户端ID和客户端
授权密码该客户端ID被认为是公共信息,并用于建立登录网址,或包括在一个页面上的Javascript源代码。客户端授权密码必须保密。如果部署的应用程序不能保守授权密码的机密,如JavaScript或本机应用程序,那么这个授权密码不被使用。

授权方式:

的OAuth 2的第一步骤是从用户获得授权。对于基于浏览器或移动应用程序,这通常是由显示给用户提供的服务的接口来实现的。

OAuth的2提供了不同的用例数批类型。定义的补助类型有:

 
一个Web服务器上运行的应用程序授权码
 
隐含的基于浏览器的或移动应用程序
 
密码与用户名和密码登录
 
对于应用程序访问客户端凭据

Web服务器应用程序
Web应用程序都写在一个服务器端语言和运行服务器的应用程序的源代码是不提供给公众。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=code&client_id=easylocate&scope=read&redirect_uri=http://localhost:8080/web

之后接受访问。该页面将被重定向到重定向URI的授权码。

http://localhost:8080/web/?code=t7ol7D

现在是时候来交换授权码来获得访问令牌。

http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

与访问令牌的OAuth的服务器回复

 {
  
“ ACCESS_TOKEN ”:“ 372c3458 - 4067 - 4b0b - 8b77 - 7930f660d990 ”
  
“ token_type ” : “bearer” ,
  
“ refresh_token ” : “ ce23c924 - 3f28 - 456C - A112 - b5d02162f10c ”
  
“ expires_in ” : 37364 ,
  
“scope” : “read”
}

万一错了授权码,的Oauth服务器回复的错误。

 {
  
“error” : “ invalid_grant ” ,
  
“ error_description ” : “无效的授权码: t7olD ”
}

安全性:需要注意的是该服务应要求应用程序进行预注册的重定向的URI 。否则将有一个错配。

基于浏览器的应用程序和移动应用程序:
基于浏览器的应用程序在浏览器从网页加载的源代码之后运行完全。由于整个源代码是提供给浏览器,他们不能保持其客户端秘密的保密性,所以这个秘密是不是在这种情况下使用。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=token&client_id=easylocate&redirect_uri=http://localhost:8080/web&scope=read

之后接受访问。该页面将被重定向到重定向URI与令牌。

http://localhost:8080/web/#access_token=372c3458-4067-4b0b-8b77-7930f660d990&token_type=bearer&expires_in=37026

就是这样,没有其他的步骤!在这一点上,一些JavaScript代码可以(在#后的部分)拉出访问令牌的片段,并开始进行API请求。

如果出现错误,你反而会收到一条错误的URI片段,如:

http://localhost:8080/web/#error=invalid_scope&error_description=Invalid+scope%3A+rea&scope=read+write

基于密码:
OAuth的2还提供了可用于令牌直接交换一个用户名和密码访问密码交付式。因为这显然需要的应用程序来收集用户的密码,它应该只用于由服务自身创建的应用程序。例如,原生Twitter的应用程序可以使用这笔款项型移动或桌面应用程序登录。

使用密码交付式,只是让类似下面的POST请求。我现在用的卷曲工具来演示POST请求。您可以使用任何其余客户端。

卷曲-I -X POST -D “的client_id = easylocate & grant_type =密码和用户名admin和密码=管理员& CLIENT_SECRET =秘密” http://localhost:8080/oauth2/oauth/token

服务器将返回与令牌

{
  
“ ACCESS_TOKEN ”:“ 4e56e9ec - 2f8e - 46b4 - 88b1 - 5d06847909ad ”

 “ token_type ” : “bearer” ,

  “ refresh_token ”:“ 7e14c979 - 7039 - 49d0 - 9c5d - 854efe7f5b38 ”
  
“ expires_in ” : 36133 ,
  
“scope” : “read,write"
}

客户端凭据基于:
基于客户端credentals授权用于服务器到服务器应用程序的访问。我只是表示使用卷曲工具的POST请求。

卷曲-I -X POST -D “的client_id = easylocate & grant_type = client_credentials & CLIENT_SECRET =秘密” http://localhost:8080/oauth2/oauth/token

服务器会回来的访问令牌
 {
  
“ ACCESS_TOKEN ”:“ 9cd23bef - ae56 - 46b0 - 82f5 - b9a8f78da569 ”
  
“ token_type ” : “bearer” ,
  
“ expires_in ” : 43199 ,
  “scope
” : “read”
}

访问的资源:

一旦您通过验证并获得访问令牌,可以提供访问令牌来访问受保护的资源。

分享到:
评论
4 楼 IT小新 2017-10-24  
你好博主,能不能分享您的这个代码啊
3 楼 shmily2038 2015-12-08  
你好,楼主,看了下你的blog,你能改变下生成的authorization_code的长度?默认为6,假如改为32或更长?
2 楼 HelloWorld90 2014-09-18  
HelloWorld90 写道
引用
http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

我的会在页面报这样的错误。
1 楼 HelloWorld90 2014-09-18  
引用
http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

相关推荐

    spring-security-oauth2-2.3.5.RELEASE-API文档-中文版.zip

    赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...

    spring-security-oauth2-autoconfigure-2.1.8.RELEASE-文档-中英对照版.zip

    赠送jar包:spring-security-oauth2-autoconfigure-2.1.8.RELEASE.jar; 赠送原API文档:spring-security-oauth2-autoconfigure-2.1.8.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-autoconfigure-...

    spring-security-oauth2-2.3.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...

    spring-security-oauth2-autoconfigure-2.1.8.RELEASE-API文档-中文版.zip

    赠送jar包:spring-security-oauth2-autoconfigure-2.1.8.RELEASE.jar; 赠送原API文档:spring-security-oauth2-autoconfigure-2.1.8.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-autoconfigure-...

    spring-security-oauth2-authorization-server.zip

    在这个项目中,我们将配置Spring Security为OAuth2的授权服务器,使用MySQL数据库存储令牌信息。 2. **Resource Server**:保护实际的API,接收带有令牌的请求并验证其有效性。虽然这个项目不直接包含资源服务器,...

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2是一个广泛使用的Java库,用于在Spring应用程序中实现OAuth2协议,提供安全授权服务。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如在社交媒体上的数据。2.0.3....

    spring security oauth2.0 (讲义+代码)

    Spring Security OAuth2.0 是一个强大的安全框架,用于构建安全的Web应用和API。OAuth2.0 是一种授权框架,允许第三方应用在用户许可的情况下访问其受保护的资源,而无需共享用户凭证。本讲义结合代码将深入探讨如何...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    `spring-security-oauth2`提供了与`spring-security-web`的集成,使得资源服务器能够直接使用Spring Security的过滤链进行安全控制。 3. **ClientDetailsService**: 该服务接口用于存储和验证OAuth2客户端的信息,...

    spring-boot spring-security-oauth2 完整demo

    在这个完整的demo中,开发者已经构建了一个使用Spring Boot、Spring Security和OAuth2的系统。关键在于如何配置OAuth2以实现微信式授权。微信授权流程通常包括以下步骤: 1. 用户访问应用,应用重定向至微信授权...

    spring-security-oauth2源码

    Spring Security OAuth2 是一个强大的框架,用于为Java应用提供OAuth2和OpenID Connect安全功能。OAuth2是一个授权框架,允许第三方应用在用户许可的情况下访问其受保护的资源,而OpenID Connect则是在OAuth2之上...

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    完整Oauth 2.0实现实例

    - 使用 Spring Security OAuth2 框架,它可以简化 OAuth 2.0 的实现。首先,你需要在项目中引入相关依赖。 - 配置授权服务器,定义客户端详情,包括客户端ID、客户端秘密、授权类型等。 - 创建数据库表,用于存储...

    Spring Cloud Alibaba 集成 Spring Security OAuth2.0 实现认证和授权

    分布式系统的认证和授权 分布式架构采用 Spring Cloud Alibaba 认证和授权采用 Spring Security OAuth2.0 实现方法级权限控制 网关采用 gateway 中间件 服务注册和发现采用 nacos

    springboot集成oauth2.0

    在"spring-security-oauth2-example-master"这个项目中,你可以找到一个完整的SpringBoot集成OAuth2.0的示例,包括配置、控制器、服务以及客户端的实现,通过学习和研究该项目,可以更好地理解上述知识点,并实际...

    视频配套笔记_Spring Security OAuth2.0认证授权_v1.1.rar

    Spring Security OAuth2.0 是一个广泛使用的Java安全框架,它为构建安全的Web应用程序提供了强大的支持。OAuth2.0是授权框架的一个标准,允许第三方应用在用户授权的情况下访问其私有资源,而无需共享用户的登录凭证...

    spring security + oauth 2.0 实现单点登录、认证授权

    Spring Security和OAuth 2.0是两个在Web应用安全领域广泛应用的框架,它们结合使用可以构建强大的单点登录(SSO)和认证授权系统。在这个系统中,`xp-sso-server`代表了认证服务器,而`xp-sso-client-a`和`xp-sso-...

    Spring security oauth源码

    Spring Security OAuth 是一个用于保护RESTful Web服务的框架,它为OAuth 1.0a和OAuth 2.0协议提供了全面的支持。在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。...

    spring security oauth2.0 需要的基础 sql 文件

    spring security oauth2.0 需要的基础 sql 文件

    OAuth2.0 使用到的jar包

    对应的jar包可能包含`spring-security-oauth2`,这个包是Spring Security的一个扩展,提供了OAuth2.0的实现。 2. **Resource Server(资源服务器)**:保护了需要访问的资源,只有持有有效令牌的客户端才能访问。...

    springboot OAuth2.0-demo

    在Spring Boot项目中,我们可以利用Spring Security的OAuth2模块来实现这个功能。 **Spring Boot与OAuth2.0集成** 1. **配置OAuth2.0服务器端** - 创建Authorization Server:这是OAuth2.0的核心,负责颁发和管理...

Global site tag (gtag.js) - Google Analytics