- 浏览: 596243 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
什么是OAuth?
OAuth(Open Authorization,开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
HTTP基本认证是一种用来允许Web浏览器,或其他客户端程序在请求时提供以用户名和口令形式的凭证的登录方式。用户名追加一个冒号然后串接上口令,得出的结果字符串再用Base64算法编码。例如,用户名是: admin,口令是: admin123,拼接后的结果是: admin:admin123,然后再用Base64编码,得到YWRtaW46YWRtaW4xMjM=。Base64编码的字符串发送出去,并由接收者解码,得到一个由冒号分隔的用户名和口令的字符串。
注意:用户名和密码在BaseClientDetails对象里面进行设置
设置基本认证所需要的用户名和密码
每次访问服务器需要从认证系统里面获得token值否则无法访问
OAuth(Open Authorization,开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
HTTP基本认证是一种用来允许Web浏览器,或其他客户端程序在请求时提供以用户名和口令形式的凭证的登录方式。用户名追加一个冒号然后串接上口令,得出的结果字符串再用Base64算法编码。例如,用户名是: admin,口令是: admin123,拼接后的结果是: admin:admin123,然后再用Base64编码,得到YWRtaW46YWRtaW4xMjM=。Base64编码的字符串发送出去,并由接收者解码,得到一个由冒号分隔的用户名和口令的字符串。
注意:用户名和密码在BaseClientDetails对象里面进行设置
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore; @Configuration @EnableAuthorizationServer public class AuthenticationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired private TokenStore tokenStore; @Bean public TokenStore tokenStore() { return new InMemoryTokenStore(); } @Autowired private ApiClientDetailsService apiClientDetailsService; @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.tokenKeyAccess("isAuthenticated()"); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.withClientDetails(apiClientDetailsService); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore); } }
设置基本认证所需要的用户名和密码
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.security.oauth2.provider.ClientDetailsService; import org.springframework.security.oauth2.provider.ClientRegistrationException; import org.springframework.security.oauth2.provider.client.BaseClientDetails; import org.springframework.stereotype.Component; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Component public class ApiClientDetailsService implements ClientDetailsService { @Autowired AppInfoRepository appInfoRepository; @Autowired JdbcTemplate jdbcTemplate; @Override public ClientDetails loadClientByClientId(String s) throws ClientRegistrationException { // 用户名和密码都存在表中 查询表赋给appInfo对象 BaseClientDetails details = new BaseClientDetails(); details.setClientId(appInfo.getAppId()); details.setClientSecret(appInfo.getAppKey()); details.setAuthorizedGrantTypes(Arrays.asList("client_credentials")); details.setAccessTokenValiditySeconds(7200); details.setScope(roles); details.setAuthorities(authorities); details.setResourceIds(resources); return details; } }
每次访问服务器需要从认证系统里面获得token值否则无法访问
//String clientReq = "appId:appKey";//默认客户端ID和客户端秘钥 String client_id="appId";//默认客户端ID String client_secret = "appKey";//默认客户端秘钥 BASE64Encoder encoder = new BASE64Encoder(); BASE64Decoder decoder = new BASE64Decoder(); //String tokenUrl = "https://101.37.25.220:8091/oauth/token?grant_type=client_credentials&scope"; String tokenUrl = "https://localhost:8443/oauth/token"; HttpsGetData httpsGetData = new HttpsGetData(); List<String> list = new ArrayList<String>(); /** * 获取返回的token * 注:请求头为Authorization,值为Basic加空格加client_id:client_secret的Base64编码 */ String tokenResult = httpsGetData.Do(tokenUrl+"?grant_type=client_credentials&scope","Authorization","Basic "+encoder.encode((client_id+":"+client_secret).getBytes()),"POST",null); JSONObject tokenJSon = new JSONObject(tokenResult);//转成json数据 String token = tokenJSon.getString("access_token");// 获得的token值 // 具体请求数据用Bearer httpsGetData.doGetData(resultUrl,"Authorization","Bearer "+token,"POST", paramJson.toString());
HttpsURLConnection connection = (HttpsURLConnection) realUrl.openConnection(); // 设置https相关属性 connection.setSSLSocketFactory(sc.getSocketFactory()); connection.setHostnameVerifier(new TrustAnyHostnameVerifier()); connection.setDoOutput(true); connection.setDoInput(true); // 设置通用的请求属性 connection.setRequestProperty("Content-Type", " application/json"); connection.setRequestProperty("Connection", "keep-alive"); connection.setRequestProperty(hearderKey, headerValue);//基于base基本认证 connection.setRequestMethod(requestMethod); // 建立实际的连接 connection.connect();
发表评论
文章已被作者锁定,不允许评论。
-
spring boot集成jsp
2018-11-21 16:53 7341.配置文件 server: port: 8080 ... -
Spring BeanFactoryPostProcessor和BeanPostProcessor的区别
2018-11-14 15:40 701链接:https://blog.csdn.net/caihai ... -
spring BeanPostProcessor理解
2018-11-14 11:31 317链接:https://blog.csdn.net/ginkgo ... -
Spring 源码解析之Initializer
2018-11-14 11:27 449链接:https://blog.csdn.net/ktlife ... -
spring boot AnnotationConfigApplicationContext的实例化过程
2018-11-10 14:18 1119链接:https://blog.csdn.net/chr1sg ... -
spring transaction同一个类不回滚解决方法
2018-10-11 10:59 7671.修改配置文件 <aop:aspectj-autopr ... -
Spring @Transaction学习
2018-10-08 10:36 2891.考虑有下面这么一个类 public class Foo ... -
spring mvc i18n国际化学习(spring:message)
2018-06-09 09:35 637spring.xml文件中配置: <!-- 存储区域 ... -
Spring Boot @Import注解(将指定类实例注入到IOC容器中)
2018-05-09 10:20 1593SpringBoot 的 @Import 用于将指定的类实例注 ... -
Spring Boot @Conditional注解
2018-05-09 10:15 1810Spring Boot的强大之处在于使用了Spring 4框架 ... -
Spring Boot自定义starter pom实例(/META-INFO/spring.factory文件)
2018-05-09 09:48 1129自定义starter pom 自己实现一个简单的例子,当某个类 ... -
Spring Boot自动配置原理(@Conditional @Import)
2018-04-26 14:45 1324Springboot的自动配置是SpringBoot的关键,主 ... -
Spring Boot优缺点总结
2018-04-16 10:25 1532优点: 1.去除了大量的xml配置文件 2.简化 ... -
SpringBoot JPA @Transaction 知识学习
2018-03-16 09:09 756一、事务相关概念 1、事务的特点 原子性:事务是一个原子操 ... -
Sprint @Query注解的用法(nativeQuery=true/false)(Spring Data JPA)
2018-03-15 16:33 37911. 一个使用@Query注解的简单例子 @Query(val ... -
Spring Boot JpaRepository知识学习(Spring Data JPA)
2018-03-14 11:17 17851.Spring Data所解决的问题 Spring Dat ... -
SpringCloud Hystrix知识学习(防止雪崩效应)
2018-03-13 14:57 924一、Hystrix说明 1.服务雪崩效应:是一种因服务提供者的 ... -
SpringCloud @LoadBalanced注解学习
2018-03-13 09:48 2212当时我们说开启负载均衡很简单,只需要在RestTemplate ... -
Spring Boot配置方式(java配置和注解配置)
2018-03-12 15:09 1104Java配置 从Spring 3.x开始,Spring提供了J ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1611REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ...
相关推荐
首先,OAuth2.0 有四个核心角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器(Authorization Server)。资源所有者是拥有受保护资源的用户,客户端是请求访问资源...
Spring Security OAuth 2.0 是一种基于 OAuth 2.0 协议的身份验证和授权框架,它提供了一个灵活和可扩展的解决方案来保护基于 Web 的应用程序。OAuth 2.0 是一种行业标准的授权协议,提供了多种授权模式来满足不同的...
Spring Security OAuth2.0 具有良好的扩展性,可以与其他Spring生态组件如Spring Boot、Spring Cloud Security等无缝集成,同时支持多种认证协议,如OpenID Connect。 **8. 客户端库支持** Spring Security OAuth...
在 Spring Boot 中实现 OAuth2.0 客户端授权模式,你需要配置 `AuthorizationServerConfigurerAdapter` 来定义授权服务器的行为,以及 `ResourceServerConfigurerAdapter` 来配置资源服务器的保护规则。同时,你需要...
OAuth2.0是一个授权框架,允许第三方应用在用户授权的情况下访问其受保护的资源,而无需知道用户的原始凭证。以下是关于这个主题的详细知识点: 1. **OAuth2.0核心概念**: - **客户端(Client)**: 需要访问受...
全网最新的Cloud 权限系统 基于Spring Boot 2.0.4.RELEASE 基于Spring Cloud Finchley.SR1 网关基于 Spring Cloud Gateway ...完整的OAuth 2.0 流程,资源服务器控制权限 去除了部分对于开发不友好的中间件,快速上手
总结起来,Spring Security Oauth2.0专题涵盖了如何使用Spring Security构建安全的OAuth2.0认证和授权系统,包括授权服务器、资源服务器的配置,以及客户端的交互。通过学习这个专题,开发者可以有效地保护Web应用的...
1. **配置OAuth2.0服务器端** - 创建Authorization Server:这是OAuth2.0的核心,负责颁发和管理令牌(Access Token)。 - 配置`@EnableAuthorizationServer`注解,启动授权服务器。 - 定义TokenStore,例如使用...
2. **资源服务器配置**:其他微服务作为资源服务器,需要配置Spring Security以接受OAuth2.0的令牌进行授权。这通常涉及到`ResourceServerConfigurerAdapter`的使用。 3. **用户认证**:实现用户认证逻辑,这可以是...
在实际开发中,根据所选择的OAuth2.0实现,你可能还需要引入其他依赖,如Spring Boot的自动配置支持,数据库连接池,或者其他与认证和授权相关的库。确保正确配置这些jar包,并遵循OAuth2.0的规范,可以构建出安全且...
配置Spring Security OAuth2.0涉及创建授权服务器和资源服务器的配置类,定义客户端信息、范围、权限等。通常,我们需要配置`AuthorizationServerConfigurerAdapter`和`ResourceServerConfigurerAdapter`。 ### 6. ...
授权服务器是OAuth2的核心组件,负责管理用户权限并颁发访问令牌(Access Tokens)。在这个系统中,它实现了OAuth2的四个主要授权类型:授权码(Authorization Code)、密码(Resource Owner Password Credentials)...
Spring Security是Spring生态中强大的安全框架,而OAuth2模块则提供了全面的OAuth2.0支持,包括授权服务器和资源服务器的实现。 - **配置资源服务器**:在Spring Boot应用中,可以通过添加`spring-security-oauth2-...
授权服务器兼容OAuth 2.0和OpenID Connect(OIDC)的授权服务器,仅用于演示目的,可用作OAuth2 / OIDC研讨会的一部分。目标此授权服务器应... 作为开源免费提供支持学习OAuth2 / OpenID Connect的努力(自学或作为...
Spring Boot 2.0.8.RELEASE 、Spring Cloud Finchley.SR2 、Spring Security OAuth2 1. 减少中间件依赖 2.0 依赖中间件只需要 mysql、redis 即可,提供傻瓜式部署方案,大大缩减了上手和使用成本。 2. 提供常见...
Spring Boot是Java开发Web应用的热门框架,它支持OAuth2.0的集成,提供了丰富的工具来构建授权服务器和资源服务器。 在Spring Boot中实现OAuth2.0: 1. **添加依赖**:在`pom.xml`或`build.gradle`文件中引入...
在这个项目中,我们基于Spring Boot、MySQL、MyBatis以及Spring OAuth2.0来实现一个完整的SSO解决方案。 首先,Spring Boot是Java领域非常流行的快速开发框架,它简化了新Spring应用的初始搭建以及开发过程。通过...
在Java环境中实现OAuth 2.0,我们可以利用Spring Security OAuth2库,这是一个广泛使用的开源库,提供了服务端和客户端的实现。 **OAuth 2.0 服务端实现(oauthserver)** 在`oauthserver`项目中,我们通常会配置...
这是因为OAuth2的设计更侧重于授权,而不是提供详细的用户信息。 为了获取更多的用户信息,例如用户ID,我们需要深入理解Spring OAuth2的工作原理。问题的关键在于`DefaultUserAuthenticationConverter`类。在`...
Spring Cloud OAuth2是一种基于OAuth2协议的授权框架,它为微服务架构提供了安全的认证和授权服务。在“Spring Cloud Oauth2的密码模式数据库方式实现登录授权验证”这个主题中,我们将深入探讨如何利用OAuth2的密码...