`

Spring Boot Oauth2.0授权服务器

 
阅读更多
什么是OAuth?

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 security oauth2.0 (讲义+代码)

    首先,OAuth2.0 有四个核心角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器(Authorization Server)。资源所有者是拥有受保护资源的用户,客户端是请求访问资源...

    Spring Security OAuth 2.0

    Spring Security OAuth 2.0 是一种基于 OAuth 2.0 协议的身份验证和授权框架,它提供了一个灵活和可扩展的解决方案来保护基于 Web 的应用程序。OAuth 2.0 是一种行业标准的授权协议,提供了多种授权模式来满足不同的...

    Spring Security OAuth2.0

    Spring Security OAuth2.0 具有良好的扩展性,可以与其他Spring生态组件如Spring Boot、Spring Cloud Security等无缝集成,同时支持多种认证协议,如OpenID Connect。 **8. 客户端库支持** Spring Security OAuth...

    spring boot oauth2.0 访问 山东X潮软件单点登录平台 源码实现.pdf

    在 Spring Boot 中实现 OAuth2.0 客户端授权模式,你需要配置 `AuthorizationServerConfigurerAdapter` 来定义授权服务器的行为,以及 `ResourceServerConfigurerAdapter` 来配置资源服务器的保护规则。同时,你需要...

    基于Spring Cloud、OAuth2.0开发基于Vue前后分离的开发平台,支持账号、短信、SSO等多种登录

    全网最新的Cloud 权限系统 基于Spring Boot 2.0.4.RELEASE 基于Spring Cloud Finchley.SR1 网关基于 Spring Cloud Gateway ...完整的OAuth 2.0 流程,资源服务器控制权限 去除了部分对于开发不友好的中间件,快速上手

    springboot集成oauth2.0

    OAuth2.0是一个授权框架,允许第三方应用在用户授权的情况下访问其受保护的资源,而无需知道用户的原始凭证。以下是关于这个主题的详细知识点: 1. **OAuth2.0核心概念**: - **客户端(Client)**: 需要访问受...

    资料-Spring Security Oauth2.0认证授权专题.rar

    总结起来,Spring Security Oauth2.0专题涵盖了如何使用Spring Security构建安全的OAuth2.0认证和授权系统,包括授权服务器、资源服务器的配置,以及客户端的交互。通过学习这个专题,开发者可以有效地保护Web应用的...

    springboot OAuth2.0-demo

    1. **配置OAuth2.0服务器端** - 创建Authorization Server:这是OAuth2.0的核心,负责颁发和管理令牌(Access Token)。 - 配置`@EnableAuthorizationServer`注解,启动授权服务器。 - 定义TokenStore,例如使用...

    (源码)基于Spring Boot和OAuth 2.0的权限管理系统.zip

    # 基于Spring Boot和OAuth 2.0的权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和OAuth 2.0的权限管理系统,旨在提供一个安全、可扩展的权限管理解决方案。系统采用OAuth 2.0协议进行授权管理,支持多种...

    springcloud_oauth2.0-master.zip

    2. **资源服务器配置**:其他微服务作为资源服务器,需要配置Spring Security以接受OAuth2.0的令牌进行授权。这通常涉及到`ResourceServerConfigurerAdapter`的使用。 3. **用户认证**:实现用户认证逻辑,这可以是...

    OAuth2.0 使用到的jar包

    在实际开发中,根据所选择的OAuth2.0实现,你可能还需要引入其他依赖,如Spring Boot的自动配置支持,数据库连接池,或者其他与认证和授权相关的库。确保正确配置这些jar包,并遵循OAuth2.0的规范,可以构建出安全且...

    spring oauth2.0

    配置Spring Security OAuth2.0涉及创建授权服务器和资源服务器的配置类,定义客户端信息、范围、权限等。通常,我们需要配置`AuthorizationServerConfigurerAdapter`和`ResourceServerConfigurerAdapter`。 ### 6. ...

    oauth2全套(授权服务器+资源服务器+客户端独立版)

    授权服务器是OAuth2的核心组件,负责管理用户权限并颁发访问令牌(Access Tokens)。在这个系统中,它实现了OAuth2的四个主要授权类型:授权码(Authorization Code)、密码(Resource Owner Password Credentials)...

    oauth2.0 资源服务

    Spring Security是Spring生态中强大的安全框架,而OAuth2模块则提供了全面的OAuth2.0支持,包括授权服务器和资源服务器的实现。 - **配置资源服务器**:在Spring Boot应用中,可以通过添加`spring-security-oauth2-...

    授权服务器:Spring Boot OAuth 2.0和OpenID Connect身份提供者授权服务器

    授权服务器兼容OAuth 2.0和OpenID Connect(OIDC)的授权服务器,仅用于演示目的,可用作OAuth2 / OIDC研讨会的一部分。目标此授权服务器应... 作为开源免费提供支持学习OAuth2 / OpenID Connect的努力(自学或作为...

    基于 OAuth2.0 的 Spring Cloud 权限管理系统

    Spring Boot 2.0.8.RELEASE 、Spring Cloud Finchley.SR2 、Spring Security OAuth2 1. 减少中间件依赖 2.0 依赖中间件只需要 mysql、redis 即可,提供傻瓜式部署方案,大大缩减了上手和使用成本。 2. 提供常见...

    OAuth2.0Demo

    Spring Boot是Java开发Web应用的热门框架,它支持OAuth2.0的集成,提供了丰富的工具来构建授权服务器和资源服务器。 在Spring Boot中实现OAuth2.0: 1. **添加依赖**:在`pom.xml`或`build.gradle`文件中引入...

    学习单点登录,基于spring boot,mysql,mybatis,spring oauth2.0.zip

    在这个项目中,我们基于Spring Boot、MySQL、MyBatis以及Spring OAuth2.0来实现一个完整的SSO解决方案。 首先,Spring Boot是Java领域非常流行的快速开发框架,它简化了新Spring应用的初始搭建以及开发过程。通过...

    Java的oauth2.0 服务端与客户端的实现.7z

    在Java环境中实现OAuth 2.0,我们可以利用Spring Security OAuth2库,这是一个广泛使用的开源库,提供了服务端和客户端的实现。 **OAuth 2.0 服务端实现(oauthserver)** 在`oauthserver`项目中,我们通常会配置...

    spring oauth2获取当前登录用户信息.docx

    这是因为OAuth2的设计更侧重于授权,而不是提供详细的用户信息。 为了获取更多的用户信息,例如用户ID,我们需要深入理解Spring OAuth2的工作原理。问题的关键在于`DefaultUserAuthenticationConverter`类。在`...

Global site tag (gtag.js) - Google Analytics