文档章节

Spring boot for Eclipse 开发指南第六节 Oauth 2.0

施立
 施立
发布于 2017/10/12 19:48
字数 520
阅读 595
收藏 27
点赞 1
评论 3

 折腾了一天. 终于在晚上 7点半 搞定了

1.废话不说 pom.xml 增加依赖 主要就是security 和 oauth2.0 的包

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>
		
		<!-- security oauth2 -->
		<dependency>
	        <groupId>org.springframework.cloud</groupId>
	        <artifactId>spring-cloud-starter-oauth2</artifactId>
		</dependency>

 

2.继承 WebSecurityConfigurerAdapter 的配置类中 主配置文件

    @Override  
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {  
        auth.inMemoryAuthentication().withUser("shili").password("zzz123").roles("ADMIN");  
    }  
@Override  
    protected void configure(HttpSecurity http) throws Exception {  
    	http.csrf().disable()
		.anonymous().disable()
	  	.authorizeRequests()
	  	.antMatchers("/oauth/token").permitAll().and().formLogin();
    }

这里主要配置了登录的用户名和密码 以及 开放 /oauth/token 的路径

 

3. 继承 ResourceServerConfigurerAdapter 的配置类中  

@Configuration
@EnableResourceServer
@Order(6)
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
	
	private static final String RESOURCE_ID = "my_rest_api";
	
	@Override
	public void configure(ResourceServerSecurityConfigurer resources) {
		resources.resourceId(RESOURCE_ID).stateless(false);
	}

	@Override
	public void configure(HttpSecurity http) throws Exception {
		http.
		anonymous().disable()
		.requestMatchers().antMatchers("/sayhello")
		.and().authorizeRequests()
		.antMatchers("/sayhello").access("hasRole('ADMIN')")
		.and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());		 
	}
}

 

4.最后是继承 AuthorizationServerConfigurerAdapter 的配置类

@Configuration
@EnableAuthorizationServer
public class SecurityOauth2Config extends AuthorizationServerConfigurerAdapter {
	
	private static String REALM="MY_OAUTH_REALM";
		
	@Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
		//客户端详情服务
		clients.inMemory()
        .withClient("13890999")
        .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
        .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
        .scopes("read", "write", "trust")
        .secret("secret")
        .accessTokenValiditySeconds(120).//Access token is only valid for 2 minutes.
        refreshTokenValiditySeconds(600);//Refresh token is only valid for 10 minutes.
	}
	
    @Override  
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {  
        oauthServer.allowFormAuthenticationForClients();  
    }  
}

 

5.测试步骤 首先访问以下地址

http://localhost:8080/oauth/authorize?client_id=13890999&response_type=code&redirect_uri=http://localhost:8080

就会跳转到登录页面 然后登录 会跳转到授权确认页面 最后会跳转到 http://localhost:8080/code=XXXXX

其中的XXXXX就是我们需要的code

然后使用curl开始POST我们的token 地址

curl "http://localhost:8080/oauth/token" -d "client_id=13890999&client_secret=secret&grant_type=authorization_code&code=XXXXX&redirect_uri=http://localhost:8080"

命令中的CODE 你要修改成你上一步获取到CODE

他就会返回如下 代码 表示已经成功了!

{"access_token":"5905c5da-0925-4752-8b6a-423936cfac71","token_type":"bearer","re
fresh_token":"9ebff67a-8a1d-462c-bf74-4a0a66f2980b","expires_in":119,"scope":"tr
ust read write"}

有了这个access_token 就可以访问 ResourceServerConfigurerAdapter 配置的url了

curl "http://localhost:8080/sayhello" -d "access_token=5905c5da-
0925-4752-8b6a-423936cfac71" -v

出现网页源代码 表示访问成功 到这里 Auth2.0 完成了一半了

明天 把那个很丑的授权页改一改 就OK了

© 著作权归作者所有

共有 人打赏支持
施立
粉丝 12
博文 22
码字总数 7480
作品 0
沈阳
架构师
加载中

评论(3)

施立
施立

引用来自“Joyzhou”的评论

写这种有什么意义,实际又不可能使用。。
我下一篇博文会介绍实际应用场合
Joyzhou
Joyzhou
写这种有什么意义,实际又不可能使用。。
netkiller-
netkiller-
呵呵,你直接参考 《Netkiller Java 手札》有完整的例子。
http://www.netkiller.cn/java/spring/boot/oauth2.html
【OAuth2学习之路】Spring Security OAuth官网文档翻译

现将开发文档翻译出来,因为看英文实在是比较吃力的。 首先看下官方的指南Developers Guide,OAuth的两个版都都有。本文看的是OAuth2的开发指南。 翻译如下: Spring Security OAuth2开发指南...

666B
2014/09/09
0
0
Spring Security OAuth2 SSO

通常公司肯定不止一个系统,每个系统都需要进行认证和权限控制,不可能每个每个系统都自己去写,这个时候需要把登录单独提出来 登录和授权是统一的 业务系统该怎么写还怎么写 最近学习了一下...

不要乱摸
07/11
0
0
一步一步构建自己的管理系统① 之 Spring Security OAuth + jwt

现在Spring boot 极大的简化了 Spring Framework 应用程序的配置,通过简单的依赖配置即可实现程序的基本安全。 首先我们先了解一下 oauth 2.0 OAuth 2.0 的规范可以参考 : RFC 6749 OAuth...

Fly_f
04/15
0
0
spring-oauth-server 2.0.0 发布,基于 Spring-Boot 2.0

经过一年多的时间后,我们发布了 spring-oauth-server 2.0.0版本. 使用Spring-Boot 2.0版本重构, 进入模块化,零配置时代. 更符合技术发展与实际需要. 相比之前的版本(1.0及之前版本), 更新如下...

monkeyk7
04/21
0
0
使用Spring Boot构建独立的OAuth服务器(三)

在 使用Spring Boot构建独立的OAuth服务器(二) 中配置了一个独立的OAuth服务器,这里要对Resource,即需要保护的API进行配置,使其在被访问的时候,可以与OAuth服务器通信,根据Access To...

MrCamel
2017/11/04
0
2
Spring Security OAuth 2.3.3, 2.2.2, 2.1.2, 2.0.15 发布

Spring Security OAuth 2.3.3, 2.2.2, 2.1.2 和 2.0.15 已发布,这些维护版本主要提供了错误修复。 有关变更的完整列表,请查阅 2.3.3 changelog 2.2.2 changelog 2.1.2 changelog 2.0.15 c...

局长
05/10
0
0
SpringCloud实践分享-OAuth2认证中心(待完成)

摘要:随着云计算的发展,微服务、前后端分离、DevOps逐渐成为架构主流。而不同于以往的单体应用,微服务大多仅以api形式专递信息,并且无状态(不记录用户登录状态及会话内容),这就为整个...

杨子敬的瞎扯时刻
06/11
0
0
Spring-Security-OAuth2

OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而不需要将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,...

李玉长
05/10
0
0
Spring Cloud云架构 - commonservice-sso服务搭建(一)

前面几篇我们已经介绍了Spring Cloud和oauth2的知识点,今天我们要利用Spring Cloud和oauth2进行commonservice-sso服务搭建,本节我们只是搭建commonservice-sso的基础平台,闲话少说,直接将...

明理萝
06/07
0
0
Spring Security Oauth 2.3.2 发布

spring-security-oauth 2.3.2 发布,目前暂未发现更新信息,您可查看发布主页保持关注。 Spring Security OAuth 是 Spring Security 的 OAuth 插件,同时提供了 OAuth 客户端(consumer)和服务...

淡漠悠然
04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

工作笔记

在list的for-each循环中,直接remove会报java.util.ConcurrentModificationException,但是在remove后面加上break就不会报错了 如果不是每次重新组装,提供出去的配置信息必须以深度克隆的方...

lost_keke
8分钟前
0
0
TensorFlow 退化学习率

随着训练次数的增多,开始时学习率较大,可以较快的收敛到最优解附近,之后学习率应该比较小 exponential_decay 设置每隔一定的学习步数就将学习率下降到指定标准 下面是每隔10步,学习率会下...

阿豪boy
9分钟前
0
0
01、centos7安装docker

1、首先在安装之前检查系统内核版本 [root@docker01 ~]# uname -r3.10.0-327.el7.x86_64[root@docker01 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@......

北岩
13分钟前
0
0
iptables filter表 nat表 应用实例

iptables基础实例 iptables -nvL 查看规则 [root@localhost ~]# iptables -nvLChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source ......

李超小牛子
15分钟前
0
0
什么?你的私钥泄漏了?

代码签名是一种当代标准做法,其中软件开发人员通过可信证书颁发机构的验证,并接收可用于签署脚本和可执行文件的证书和私钥。 几乎每个设备,操作系统和网络浏览器都经过硬编码,以尽可能少...

亚洲诚信
19分钟前
1
0
Iterm2安装Zsh + Oh My Zsh+Solarized

安装Oh My Zsh curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 安装Zsh: 1.安装zsh brew install zsh 2.配置iterm2 sudo vim /etc/shells输入:......

孟飞阳
27分钟前
0
0
缓解ddos攻击的有效解决办法

因为防火墙无法处理所有类型的ddos攻击,下一代防火墙生成内置的DDoS防御,但是无法处理所有类型的攻击。对抗DDoS攻击的最佳做法是有专属的设备或者服务在攻击透过防火墙或者其他的IT基础设施...

上树的熊
27分钟前
0
0
Spark Streaming如何使用checkpoint容错

在互联网场景下,经常会有各种实时的数据处理,这种处理方式也就是流式计算,延迟通常也在毫秒级或者秒级,比较有代表性的几个开源框架,分别是Storm,Spark Streaming和Filnk。 伦理片 http...

刺猬一号
29分钟前
1
0
Xamarin Essentials教程地理定位Geolocation

Xamarin Essentials教程地理定位Geolocation 通过地理定位功能,应用程序可以获取用户的当前地理位置,如经纬度值。利用地理位置,可以在地图上定位,也可以转化物理位置,划分用户的归属地。...

大学霸
42分钟前
0
0
vue 编译警告 Compiled with 4 warnings

There are multiple modules with names that only differ in casing. This can lead to unexpected behavior when compiling on a filesystem with other case-semantic. Use equal casing.......

落雪飞声
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部