转自:http://hevanwang.iteye.com/blog/2009923

上周,我想开发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”
}

访问的资源:

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

Spring-security-oauth2讲解相关推荐

  1. java oauth sso 源码_基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践

    概 述 在前文<基于Spring Security和 JWT的权限系统设计>之中已经讨论过基于 Spring Security和 JWT的权限系统用法和实践,本文则进一步实践一下基于 Sp ...

  2. Re:从零开始的Spring Security Oauth2(二)

    本文开始从源码的层面,讲解一些Spring Security Oauth2的认证流程.本文较长,适合在空余时间段观看.且涉及了较多的源码,非关键性代码以-代替. 准备工作 首先开启debug信息: l ...

  3. 还不了解Oauth2协议?这篇文章从入门到入土让你了解Oauth2以及Spring Security OAuth2 的使用

    SpringSecurityOAuth2学习和实战 1.OAuth2概述 1.1 什么是OAuth2 OAuth(Open Authorization)是一个关于授权(authorization)的开 ...

  4. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] [Spring Securi ...

  5. 源码分析 - Spring Security OAuth2 生成 token 的执行流程

    说明 本文内容全部基于 Spring Security OAuth2(2.3.5.RELEASE). OAuth2.0 有四种授权模式, 本文会以 密码模式 来举例讲解源码. 阅读前, 需要对 OAu ...

  6. Spring Security OAuth2 入门,linux操作系统学习

    在授权码模式下,允许为空. 可能有部分胖友是 Windows 电脑,可以参考 <windows(64位)下使用 curl 命令> 来安装一个 curl 命令. 当然,如果胖友使用 Post ...

  7. 使用Spring Security Oauth2 和 JWT保护微服务--Uaa授权服务器的编写

    学习自深入理解微服务 采用Spring Security OAuth2 和 JWT的方式,Uaa服务只需要验证一次,返回JWT.返回的JWT包含了用户的所有信息,包括权限信息 从三个方面讲解: JWT ...

  8. Spring Security OAuth2认证授权示例

    本文介绍了如何使用Spring Security OAuth2构建一个授权服务器来验证用户身份以提供access_token,并使用这个access_token来从资源服务器请求数据. 1.概述 OA ...

  9. Spring Security OAuth2.0认证授权三:使用JWT令牌

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] 前面两篇文章详细讲解了如何基 ...

  10. Spring Security OAuth2 Demo -- good

    1. 添加依赖 授权服务是基于Spring Security的,因此需要在项目中引入两个依赖: <dependency><groupId>org.springframework ...

最新文章

  1. lighttpd 负载均衡-反向代理+cache浅谈
  2. 爬虫之requests模块cookieJar对象转换为cookies字典的方法
  3. 这年头,机器翻译都会通过文字脑补画面了 | NAACL 2021
  4. 网络验证常见的攻击方式与防御手段
  5. 正确认识Arrays.asList方法
  6. 9种蔬菜吃不对胜似砒霜
  7. Python学习笔记:IO编程StringIO和BytesIO
  8. can 总线通信协议开发_Simulink应用层开发—CAN总线信号处理
  9. false shell 判断_六、Shell流程控制-if判断语句
  10. python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...
  11. python中strip是什么意思啊_python中的strip是什么意思
  12. weka使用训练集分类测试集_Giao 13C NMR计算分类训练集提高结构归属的准确性和可靠性...
  13. L3-009 长城 (30 分)-PAT 团体程序设计天梯赛 GPLT
  14. python中stripped string_【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
  15. 性能测试案例模板 性能测试用例模板 测试案例 性能用例 模板 容我想想之性能测试系列培训...
  16. 《天勤数据结构》笔记——假溢出和循环队列基本操作的实现(C/C++)
  17. 诺基亚x6 android one,诺基亚X6手机推送固件更新:提升安卓8.1系统流畅性,新增后台锁定...
  18. php月份转英文缩写,将日期转换成时间戳 strtotime
  19. 利用powershell安装360杀毒
  20. 二分图判断以及二分图最大匹配

热门文章

  1. git 命令删除分支
  2. JavaScript split() 方法:把一个字符串分割成字符串数组
  3. [GitHub] JavaScript 趋势榜项目(第34周)
  4. 《阅读的方法》读书笔记4-2:极致的体验
  5. java整数类型计算百分比
  6. 怎么查看电脑是不是禁ping_Win7系统怎么取消禁ping命令? -电脑资料
  7. nltk 自己训练模型例子
  8. CST电磁仿真软件的功能和优势有哪些
  9. Android适配之水滴屏和虚拟按键
  10. 16-Figma-自动布局