Spring-security-Oauth2.0
上周,我想开发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:+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.0的更多相关文章
- 【OAuth2.0】Spring Security OAuth2.0篇之初识
不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...
- springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)
项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖 ...
- Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离
<Spring Security实现OAuth2.0授权服务 - 基础版>和<Spring Security实现OAuth2.0授权服务 - 进阶版>两篇文章中介绍如何搭建OA ...
- 基于spring boot2.0+spring security +oauth2.0+ jwt微服务架构
github地址:https://github.com/hankuikuide/microservice-spring-security-oauth2 项目介绍 该项目是一个演示项目,主要演示了,基于 ...
- Spring Security OAuth2.0认证授权二:搭建资源服务
在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...
- Spring Security OAuth2.0认证授权三:使用JWT令牌
Spring Security OAuth2.0系列文章: Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二: ...
- Spring Security OAuth2.0认证授权四:分布式系统认证授权
Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...
- Spring Security OAuth2.0认证授权五:用户信息扩展到jwt
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- Spring Security OAuth2.0认证授权六:前后端分离下的登录授权
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- spring security oauth2.0 实现
oauth应该属于security的一部分.关于oauth的的相关知识可以查看阮一峰的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html ...
随机推荐
- Dapper,大规模分布式系统的跟踪系统
概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...
- [leetcode]Best Time to Buy and Sell Stock III @ Python
原题地址:https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ 题意: Say you have an array ...
- Distinct Subsequences leetcode java
题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...
- SpringBoot整合Quartz定时任务 的简单实例
POM.XML文件 <!-- 定时器任务 quartz需要导入的坐标 --> <dependency> <groupId>org.quartz-scheduler& ...
- Annotation Type EnableTransactionManagement
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Ena ...
- Windows系统内存分析工具的介绍
Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任 ...
- HDU 1541 Stars (线段树)
Problem Description Astronomers often examine star maps where stars are represented by points on ...
- IT行业简报 2014-2-8
1.微信在“我的银行卡”页面接入嘀嘀打车,三天内微信打车突破10万单,日均订单为70万,其中微信支付订单超过48万单2.三大运营商手机支付用户仅366.3万,与腾讯单月发展手机支付用户500万户相比, ...
- OSX系统的sublime配置php执行编译
OSX系统的sublime配置php执行编译 1).进入如下菜单 2)弹出内容如下: { "cmd": ["make"] } 修改为: { "cmd& ...
- LCX端口内网映射转发
这几天在渗透一家奶茶店的时候, 使用溢出攻击获得了奶茶店shell, 截屏以后发现该电脑有安装sqlserver, 但是数据库无法远程连接, 所以我决定使用端口映射工具突破端口连接限制: 我的机器地址 ...