首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用spring boot安全性和oauth flow设置access_type=offline以生成刷新令牌

Spring Boot是一个用于构建Java应用程序的开源框架,它简化了Java开发过程并提供了许多开箱即用的功能。在使用Spring Boot时,可以通过集成Spring Security和OAuth 2.0来实现应用程序的安全性和OAuth流程。

要设置access_type=offline以生成刷新令牌,可以按照以下步骤进行操作:

  1. 添加依赖:在项目的pom.xml文件中,添加Spring Security和OAuth 2.0的相关依赖。例如:
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
  1. 配置Spring Security:创建一个配置类,用于配置Spring Security。可以通过继承WebSecurityConfigurerAdapter类来实现。在配置类中,可以设置访问规则、用户认证等安全相关的配置。
代码语言:txt
复制
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/oauth2/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .oauth2Login();
    }
}

在上述配置中,/oauth2/**路径被设置为允许所有用户访问,其他路径需要进行认证。

  1. 配置OAuth 2.0:创建一个配置类,用于配置OAuth 2.0。可以通过继承AuthorizationServerConfigurerAdapter类来实现。在配置类中,可以设置客户端信息、授权类型、令牌存储等OAuth相关的配置。
代码语言:txt
复制
@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
            .inMemory()
                .withClient("client-id")
                .secret("client-secret")
                .authorizedGrantTypes("authorization_code", "refresh_token")
                .scopes("read", "write")
                .redirectUris("http://localhost:8080/login/oauth2/code/custom");
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
            .authenticationManager(authenticationManager);
    }
}

在上述配置中,使用了内存存储客户端信息,并设置了授权类型为authorization_code和refresh_token。

  1. 设置access_type=offline:在OAuth 2.0的配置类中,可以通过设置additionalParameters来设置额外的参数。在这里,可以设置access_type为offline。
代码语言:txt
复制
@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    // ...

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
            .authenticationManager(authenticationManager)
            .tokenGranter(tokenGranter(endpoints));
    }

    private TokenGranter tokenGranter(final AuthorizationServerEndpointsConfigurer endpoints) {
        List<TokenGranter> granters = new ArrayList<>(Arrays.asList(endpoints.getTokenGranter()));
        granters.add(new AuthorizationCodeTokenGranter(endpoints.getTokenServices(), endpoints.getAuthorizationCodeServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
        return new CompositeTokenGranter(granters);
    }

    @Bean
    public AuthorizationServerTokenServices tokenServices(final AuthorizationServerProperties properties, final TokenStore tokenStore, final AccessTokenConverter accessTokenConverter) {
        DefaultTokenServices services = new DefaultTokenServices();
        services.setTokenStore(tokenStore);
        services.setSupportRefreshToken(true);
        services.setReuseRefreshToken(false);
        services.setTokenEnhancer(accessTokenConverter);
        services.setAccessTokenValiditySeconds(properties.getAccessTokenValiditySeconds());
        services.setRefreshTokenValiditySeconds(properties.getRefreshTokenValiditySeconds());
        return services;
    }

    @Bean
    public TokenStore tokenStore(final DataSource dataSource) {
        return new JdbcTokenStore(dataSource);
    }

    @Bean
    public AccessTokenConverter accessTokenConverter() {
        return new DefaultAccessTokenConverter();
    }

    @Bean
    public JdbcClientDetailsService clientDetailsService(final DataSource dataSource) {
        return new JdbcClientDetailsService(dataSource);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public TokenEndpointAuthenticationFilter tokenEndpointAuthenticationFilter(final AuthenticationManager authenticationManager, final OAuth2RequestFactory oAuth2RequestFactory) {
        TokenEndpointAuthenticationFilter filter = new TokenEndpointAuthenticationFilter(authenticationManager, oAuth2RequestFactory);
        filter.setAuthenticationSuccessHandler(new OAuth2AuthenticationSuccessHandler());
        filter.setAuthenticationFailureHandler(new OAuth2AuthenticationFailureHandler());
        return filter;
    }

    @Bean
    public OAuth2RequestFactory oAuth2RequestFactory(final ClientDetailsService clientDetailsService) {
        return new DefaultOAuth2RequestFactory(clientDetailsService);
    }

    @Bean
    public OAuth2RequestValidator oAuth2RequestValidator() {
        return new DefaultOAuth2RequestValidator();
    }

    @Bean
    public OAuth2AuthorizationValidator oAuth2AuthorizationValidator() {
        return new DefaultOAuth2AuthorizationValidator();
    }

    @Bean
    public OAuth2TokenValidator oAuth2TokenValidator() {
        return new DefaultOAuth2TokenValidator();
    }

    @Bean
    public OAuth2TokenIntrospectValidator oAuth2TokenIntrospectValidator() {
        return new DefaultOAuth2TokenIntrospectValidator();
    }

    @Bean
    public OAuth2TokenRevocationValidator oAuth2TokenRevocationValidator() {
        return new DefaultOAuth2TokenRevocationValidator();
    }

    @Bean
    public OAuth2TokenRequestValidator oAuth2TokenRequestValidator() {
        return new DefaultOAuth2TokenRequestValidator();
    }

    @Bean
    public OAuth2TokenStoreValidator oAuth2TokenStoreValidator() {
        return new DefaultOAuth2TokenStoreValidator();
    }

    @Bean
    public OAuth2TokenIntrospectionValidator oAuth2TokenIntrospectionValidator() {
        return new DefaultOAuth2TokenIntrospectionValidator();
    }

    @Bean
    public OAuth2TokenRevocationRequestValidator oAuth2TokenRevocationRequestValidator() {
        return new DefaultOAuth2TokenRevocationRequestValidator();
    }

    @Bean
    public OAuth2TokenIntrospectionRequestValidator oAuth2TokenIntrospectionRequestValidator() {
        return new DefaultOAuth2TokenIntrospectionRequestValidator();
    }

    @Bean
    public OAuth2TokenRevocationEndpointValidator oAuth2TokenRevocationEndpointValidator() {
        return new DefaultOAuth2TokenRevocationEndpointValidator();
    }

    @Bean
    public OAuth2TokenIntrospectionEndpointValidator oAuth2TokenIntrospectionEndpointValidator() {
        return new DefaultOAuth2TokenIntrospectionEndpointValidator();
    }

    @Bean
    public OAuth2TokenEndpointValidator oAuth2TokenEndpointValidator() {
        return new DefaultOAuth2TokenEndpointValidator();
    }

    @Bean
    public OAuth2AuthorizationEndpointValidator oAuth2AuthorizationEndpointValidator() {
        return new DefaultOAuth2AuthorizationEndpointValidator();
    }

    @Bean
    public OAuth2AuthorizationRequestValidator oAuth2AuthorizationRequestValidator() {
        return new DefaultOAuth2AuthorizationRequestValidator();
    }

    @Bean
    public OAuth2AuthorizationCodeValidator oAuth2AuthorizationCodeValidator() {
        return new DefaultOAuth2AuthorizationCodeValidator();
    }

    @Bean
    public OAuth2AuthorizationCodeGrantValidator oAuth2AuthorizationCodeGrantValidator() {
        return new DefaultOAuth2AuthorizationCodeGrantValidator();
    }

    @Bean
    public OAuth2AuthorizationCodeRequestValidator oAuth2AuthorizationCodeRequestValidator() {
        return new DefaultOAuth2AuthorizationCodeRequestValidator();
    }

    @Bean
    public OAuth2AuthorizationCodeTokenGranter oAuth2AuthorizationCodeTokenGranter(final AuthorizationServerTokenServices tokenServices, final AuthorizationCodeServices authorizationCodeServices, final ClientDetailsService clientDetailsService, final OAuth2RequestFactory requestFactory) {
        return new OAuth2AuthorizationCodeTokenGranter(tokenServices, authorizationCodeServices, clientDetailsService, requestFactory);
    }

    @Bean
    public OAuth2RefreshTokenGranter oAuth2RefreshTokenGranter(final AuthorizationServerTokenServices tokenServices, final ClientDetailsService clientDetailsService, final OAuth2RequestFactory requestFactory) {
        return new OAuth2RefreshTokenGranter(tokenServices, clientDetailsService, requestFactory);
    }

    @Bean
    public OAuth2ImplicitTokenGranter oAuth2ImplicitTokenGranter(final AuthorizationServerTokenServices tokenServices, final ClientDetailsService clientDetailsService, final OAuth2RequestFactory requestFactory) {
        return new OAuth2ImplicitTokenGranter(tokenServices, clientDetailsService, requestFactory);
    }

    @Bean
    public OAuth2ClientCredentialsTokenGranter oAuth2ClientCredentialsTokenGranter(final AuthorizationServerTokenServices tokenServices, final ClientDetailsService clientDetailsService, final OAuth2RequestFactory requestFactory) {
        return new OAuth2ClientCredentialsTokenGranter(tokenServices, clientDetailsService, requestFactory);
    }

    @Bean
    public OAuth2ResourceOwnerPasswordTokenGranter oAuth2ResourceOwnerPasswordTokenGranter(final AuthorizationServerTokenServices tokenServices, final ClientDetailsService clientDetailsService, final OAuth2RequestFactory requestFactory) {
        return new OAuth2ResourceOwnerPasswordTokenGranter(tokenServices, clientDetailsService, requestFactory);
    }

    @Bean
    public OAuth2TokenGranter oAuth2TokenGranter(final AuthorizationServerEndpointsConfigurer endpoints) {
        return new CompositeTokenGranter(Arrays.asList(
                oAuth2AuthorizationCodeTokenGranter(endpoints.getTokenServices(), endpoints.getAuthorizationCodeServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()),
                oAuth2RefreshTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()),
                oAuth2ImplicitTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()),
                oAuth2ClientCredentialsTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()),
                oAuth2ResourceOwnerPasswordTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory())
        ));
    }
}

在上述配置中,通过自定义TokenGranter来添加授权类型,并设置access_type为offline。

以上就是使用Spring Boot设置access_type=offline以生成刷新令牌的步骤。通过这些配置,可以实现安全性和OAuth流程,并生成刷新令牌以供后续使用。

请注意,以上答案中没有提及腾讯云相关产品和产品介绍链接地址,因为要求答案中不能提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商。如需了解腾讯云相关产品和产品介绍,请参考腾讯云官方文档或咨询腾讯云官方客服。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深度解读-如何用keycloak管理external auth

文章目录 初探`OAuth` 初始化`oidc client` 生成 auth url auth callback 换取 token 使用 keycloak IDP keycloak 配置 keycloak...setup Sign in with Google using Keycloak[3] 如下图,一般授权流程(standard flow)中客户端auth server主要是两个阶段 生成auth...(accessToken)刷新令牌(refreshToken) .add_extra_param("access_type", "offline") .url(); 这里参数access_type...使用 keycloak IDP keycloak 配置 上边流程怎么让 keycloak 这个身份访问管理系统接管呢,答案是使用keycloak IDP (Identity provider) 我们先看下需要如何配置相应配置...好了,keycloak如何管理external auth到这里就结束了。以上是我在使用keycloak的一些摸索思考,欢迎大家一起探讨。

58430
  • Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战

    OAuth2协议的设计目标是简化授权流程提高安全性,通过委托授权的方式使用令牌来实现用户第三方应用程序之间的安全通信。它已成为许多互联网服务提供商开发者在构建应用程序时常用的授权标准。...:令牌应具有适当的有效期,限制其使用时间。...PKCE(Proof Key for Code Exchange):PKCE是一种用于增强授权码模式安全性的扩展,它使用随机生成的密钥来绑定授权码的使用,防止授权码被截获重放攻击。...创建多个微服务 创建商城服务商家管理后台服务的Spring Boot项目。可以使用Spring Initializr(https://start.spring.io/)来快速生成项目骨架。...步骤3:创建授权服务器 创建一个独立的授权服务器,用于颁发访问令牌验证客户端。可以使用Spring Security OAuth2Spring Boot来实现授权服务器。

    1.7K11

    IdentityServer(11)- 使用Hybrid Flow并添加API访问控制

    Hybrid Flow implicit flow是OIDC(OpenID Connect)协议中的术语,Implicit Flow是指使用OAuth2的Implicit流程获取Id TokenAccess...Token;Hybrid Flow是指混合Authorization Code FlowOAuth授权码流程)Implici Flow。...在之前的文章,我们探索了API访问控制身份认证。 现在我们要把这两个部分结合在一起。 OpenID ConnectOAuth 2.0组合的优点在于,您可以使用单一协议和令牌服务进行单一交换。...添加offline_accessapi1作用域,并将ResponseType设置为代码id_token(基本意思是“使用混合流”) .AddOpenIdConnect("oidc", options...使用访问令牌 OpenID Connect中间件会自动为您保存令牌(标识,访问刷新)。 这就是SaveTokens设置的作用。 技术上,令牌存储在cookie。

    1.2K40

    可能是第二好的 Spring OAuth 2.0 文章,艿艿端午在家写了 3 天~

    概述 在《芋道 Spring Boot 安全框架 Spring Security 入门》文章中,艿艿分享了如何使用 Spring Security 实现认证与授权的功能,获得广大女粉丝的好评。...于是乎,艿艿准备再来分享一波 Spring Security OAuth 框架,看看在 Spring Security 如何实现 OAuth2.0 实现授权的功能。...错误的访问令牌 “友情提示:访问令牌需要在请求头 "Authorization" 上设置,并且 "Bearer " 开头。...可能会胖友有疑惑,为什么会有刷新令牌呢?每次请求资源服务器时,都会在请求上带上访问令牌,这样它的泄露风险是相对高的。 因此,出于安全性的考虑,访问令牌的过期时间比较短,刷新令牌的过期时间比较长。...“友情提示:如果不进行 UserDetailsService 的设置,在使用刷新令牌获取新的访问令牌时,会抛出异常。

    2K30

    OAuth2混合模式

    简介OAuth2混合模式(Hybrid Flow)是一种OAuth2授权模式,它结合了授权码模式隐式授权模式的优点,可以在保证安全性的同时,提供更好的用户体验。...混合模式结合了这两种授权模式的优点,它使用授权码模式来获得授权码,然后使用隐式授权模式来获得访问令牌。这样可以保证安全性,同时又不需要客户端授权服务器之间的交互,给用户带来更好的体验。...在本文中,我们将使用Spring Cloud Security OAuth2来实现OAuth2混合模式,并给出详细的流程示例。...客户端收到授权码后,使用授权码向授权服务器发送请求,获取访问令牌。...授权服务器验证授权码,并生成访问令牌刷新令牌。然后将访问令牌刷新令牌返回给客户端。客户端收到访问令牌后,可以使用它来访问受保护的资源。

    76810

    与我一起学习微服务架构设计模式11—开发面向生产环境的微服务应用

    但你也可以将其用于应用程序中的身份验证访问授权。 如何验证API客户端: 客户端发出请求,使用凭据,API Gateway通过向OAuth2.0身份验证服务器发出请求来验证API客户端。...API Gateway使用OAuth2.0身份验证服务器对其凭据进行身份验证,并将其访问令牌刷新令牌作为cookie返回。...客户端在其对API Gateway的请求中包含这些令牌(访问令牌刷新令牌)。 微服务架构中实现安全性的关键思想: API Gateway负责验证客户端身份。...若使用Spring boot创建服务,它具有极其灵活的外部化配置机制,可使用明确的定义的优先级规则从各种来源检索配置属性。...服务如何生成日志 确定使用的日志库,如Logback、log4j、JUL、SLF4J。 还需要确定记录的位置,你可以日志输出到stdout,然后,部署基础设施将决定如何处理服务的输出。

    2K10

    区分清楚Authentication,Authorization以及Cookie、Session、Token

    这两个一般在我们的系统中被结合在一起使用,目的就是为了保护我们系统的安全性。 2. 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?...除此之外,Cookie 还能保存用户首选项,主题其他设置信息。...这部分内容参考:https://attacomsian.com/blog/cookies-spring-boot,更多如何Spring Boot使用Cookie 的内容可以查看这篇文章。...Cookie Session 有什么区别?如何使用Session进行身份验证? Session 的主要作用就是通过服务端记录用户的状态。...如何基于Token进行身份验证? 我们在上一个问题中探讨了使用 Session 来鉴别用户的身份,并且给出了几个 Spring Session 的案例分享。

    3.5K20

    OAuth2.0 OpenID Connect 二

    您从 OIDC 流返回的令牌端点的内容/userinfo是请求的流类型范围的函数。scope在这里,您可以为设置不同的开关response_type,这决定了您应用程序的流类型。...您是否有将与 OP 交互的中间件,例如 Spring Boot 或 Node.js Express?下面,我们将深入探讨一些可用的流程以及何时适合使用它们。...下面是这个流程如何使用 Okta 开始的示例: https://micah.okta.com/oauth2/aus2yrcz7aMrmDAKZ1t7/v1/authorize?...在上面的屏幕截图中,您可以看到返回的代码原始state. 现在可以通过中间层(在本例中为 Spring Boot 应用程序)将该代码交换为 id_token。...当您希望最终用户应用程序能够立即访问短期令牌(例如身份信息)id_token,并且还希望使用后端服务使用刷新将授权代码交换为长期令牌时,这是一种合适的方法令牌。 它是授权代码隐式代码流的组合。

    32240

    单点登录与授权登录业务指南

    Spring Security 配置: 设置安全配置,连接到 sso-server。...要使用Spring Boot实现一个授权登录业务,通常会结合Spring SecurityOAuth 2.0。...创建Spring Boot项目 首先,创建一个新的Spring Boot项目。可以使用Spring Initializr来快速生成项目结构。 添加依赖 在项目的pom.xml文件中添加必要的依赖。...要实现一个基于Spring BootOAuth2授权登录服务,我们将创建两个项目模块:一个作为授权服务器(server),另一个作为客户端(client)。下面分别说明这两个模块的基本设置实现。...通过这种方式,你可以设置一个完整的OAuth2授权登录流程,其中授权服务器负责用户认证令牌发放,客户端负责向用户展示登录界面并使用授权服务器提供的服务。

    88921

    Spring Security OAuth2.0实现

    这个配置对象),当你设置了这个之后,那么refresh_token即刷新令牌授权类型模式的流程中就会包含一个检查,用来确保这个账号是否仍然有效,例如你禁用了这个账户的话。...可以在令牌中自定义丰富的内容,易扩展。 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。 资源服务使用JWT可不依赖认证服务即可完成授权。 缺点: JWT令牌较长,占存储空间比较大。...uaa中配置jwt令牌服务,即可实现生成jwt格式的令牌。...使用令牌请求资源: 令牌申请成功后,还可以使用/uaa/oauth/check_token校验令牌的有效性,并查询令牌的内容: 数据库动态配置 目前为止客户端信息授权码仍然存储在内存中,生产环境中通常会存储在数据库中...测试授权码模式:生成的授权存储到数据库中。 示例源码:https://github.com/Mcdull0921/security-spring-boot

    2.7K30

    配置 Spring Cloud Data Flow 的监控安全控制

    Spring Cloud Data Flow 提供了监控安全控制的功能,确保数据流任务的可靠性安全性。...配置 Spring Cloud Data Flow 的监控Spring Cloud Data Flow 提供了丰富的监控功能,包括监控应用程序、任务、数据流的健康状况、性能状态等。...配置 Spring Cloud Data Flow 的安全控制Spring Cloud Data Flow 支持多种安全控制方式,包括基于 OAuth2 的安全控制、基于 LDAP 的安全控制基于 Kerberos...在本文中,我们将介绍如何使用基于 OAuth2 的安全控制来保护 Spring Cloud Data Flow使用基于 OAuth2 的安全控制需要先配置一个 OAuth2 服务提供方。...在完成配置后,可以使用 Spring Security OAuth2 的登录页面来登录 Spring Cloud Data Flow访问管理数据流任务。

    56330

    Spring Security 在 Spring Boot使用 OAuth2【分布式】

    Spring-Security-OAuth2 是对 OAuth2 的一种实现,并且跟 Spring Security 相辅相成,与 Spring Cloud 体系的集成也非常便利,最终使用它实现分布式认证授权解决方案...这种方式是最常用,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。...自定义 AuthorizationServerTokenServices 这个接口的实现,则需要继承 DefaultTokenServices 这个类,里面包含了一些有用实现,可以使用它来修改令牌的格式令牌的存储...,所以它通常用来处理一个生命周期较短的令牌以及撤销刷新令牌(refresh_token)。...♞ tokenStore:TokenStore 类的实例,指定令牌如何访问,与 tokenServices 配置可选   ♞ resourceld:这个资源服务的 id,这个属性是可选的,但是推荐设置并在授权服务中进行验证

    7K41

    SpringCloud-基于Oauth2的SSO单点登录原理解析与实现

    本文将深入解析单点登录的原理,并详细介绍如何Spring Cloud环境中实现单点登录。通过具体的架构图代码示例,我们将展示SSO的工作机制优势,帮助开发者更好地理解应用这一技术。...可以使用Spring SecurityOAuth2来实现这一功能。...建立认证中心认证中心负责用户认证Token生成。可以使用Spring SecurityOAuth2来实现认证中心。...,客户端应用可以使用这个令牌来访问受保护的资源。...在实际应用中,开发者应根据具体需求和系统架构选择合适的实现方案,并不断优化提高系统性能安全性。以下是一些关键点:技术选型:选择适合业务需求的SSO实现方式,如基于OAuth2、JWT或CAS等。

    1.3K24

    OAuth2简化模式

    OAuth 2.0 简化模式(Implicit Flow)是 OAuth 2.0 的一种授权方式,主要用于移动应用或 Web 应用中的前端客户端(例如 JavaScript 应用)的授权。...下面我们将详细介绍 OAuth2 简化模式的授权流程、优缺点以及如何Spring Cloud Security OAuth2 中实现。...前端客户端使用授权码向认证服务器请求访问令牌。认证服务器返回访问令牌。前端客户端使用访问令牌向资源服务器请求受保护的资源。...(F)客户端使用访问令牌向资源服务器请求受保护的资源。优缺点OAuth2 简化模式的优缺点如下:优点实现简单:相对于授权码模式,简化模式的实现更为简单。...不支持刷新令牌:由于没有授权码的参与,简化模式无法使用授权码来获取刷新令牌,因此无法支持刷新令牌的功能。令牌泄露风险:访问令牌存储在前端客户端中,容易被窃取或泄露,从而导致令牌被盗用。

    1.8K10

    Oauth2协议

    同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。...):客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission) ---- 令牌类型 授权码:仅用于授权码授权类型,用于交换获取访问令牌刷新令牌 访问令牌:用于代表一个用户或服务直接去访问受保护的资源...刷新令牌:用于去授权服务器获取一个刷新访问令牌 BearerToken:不管谁拿到Token都可以访问资源,类似现金 Proof of Possession(PoP) Token:可以校验client...docker就是客户端模式,去授权服务器进行授权,拿到令牌后,直接下载对应的镜像 ---- 刷新令牌----令牌过期 ---- Spring Security Oauth2 授权服务器 Authorize...密码登录输入的就是我们自定义用户时,设置的用户名密码 访问请求获取令牌 http://localhost:8080/oauth/token 获取到令牌 拿着令牌请求资源 ---- 在Redis

    1.3K10

    Spring Authorization Server 全新授权服务器整合使用

    前言 Spring Authorization Server 是 Spring 团队最新开发适配 OAuth 协议的授权服务器项目,旨在替代原有的 Spring Security OAuth...经过半年的开发孵化,目前已经发布了 0.1.0 版本,初步支持授权码、客户端、刷新、注销等 OAuth 协议 本文环境基于 Spring Boot 2.4.2 && authorization-server...--security dependency--> org.springframework.boot spring-boot-starter-security...初始化配置 由于官方还未提供对应的 Spring Boot Starter 自动化配置,需要自己配置相关的 @Bean 本配置基于 Spring Boot 2.4.2 请知悉 @Configuration...RegisteredClient..tokenSettings() 默认配置如下, 包括令牌有效期,刷新令牌控制等 protected static Map defaultSettings

    2.7K20

    Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器

    概要 之前的两篇文章,讲述了Spring Security 结合 OAuth2 、JWT 的使用,这一节要求对 OAuth2、JWT 有了解,若不清楚,先移步到下面两篇提前了解下。...优点 使用 OAuth2 是向认证服务器申请令牌,客户端拿这令牌访问资源服务服务器,资源服务器校验了令牌无误后,如果资源的访问用到用户的相关信息,那么资源服务器还需要根据令牌关联查询用户的信息。...使用 JWT 是客户端通过用户名、密码 请求服务器获取 JWT,服务器判断用户名密码无误之后,可以将用户信息权限信息经过加密成 JWT 的形式返回给客户端。...所以,如果我们在使用 OAuth2 时结合JWT ,就能节省集中式令牌校验开销,实现无状态授权认证。...:设置签名key 保持授权服务器一致。

    1.4K30

    Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器

    概要 之前的两篇文章,讲述了Spring Security 结合 OAuth2 、JWT 的使用,这一节要求对 OAuth2、JWT 有了解,若不清楚,先移步到下面两篇提前了解下。...优点 使用 OAuth2 是向认证服务器申请令牌,客户端拿这令牌访问资源服务服务器,资源服务器校验了令牌无误后,如果资源的访问用到用户的相关信息,那么资源服务器还需要根据令牌关联查询用户的信息。...使用 JWT 是客户端通过用户名、密码 请求服务器获取 JWT,服务器判断用户名密码无误之后,可以将用户信息权限信息经过加密成 JWT 的形式返回给客户端。...所以,如果我们在使用 OAuth2 时结合JWT ,就能节省集中式令牌校验开销,实现无状态授权认证。...:设置签名key 保持授权服务器一致。

    1.8K40

    OAuth 详解 什么是 OAuth?

    然后将授权传递给令牌端点。令牌端点处理授权并说“很好,这是您的刷新令牌访问令牌”。 ? 您可以使用访问令牌来访问 API。一旦它过期,您将必须使用刷新令牌返回到令牌端点获取新的访问令牌。...此过程将授权代码授予交换访问令牌(可选)刷新令牌。客户端使用访问令牌访问受保护的资源。...这是最安全的流程,因为您可以对客户端进行身份验证兑换授权授予,并且令牌永远不会通过用户代理传递。不仅有隐式授权代码流程,您还可以使用 OAuth 执行其他流程。同样,OAuth 更像是一个框架。...因为 SAML 断言是短暂的,所以此流程中没有刷新令牌,您必须在每次断言过期时继续检索访问令牌。 不在 OAuth 规范中,是Device Flow。没有网络浏览器,只有电视之类的控制器。...客户端应用程序使用反向通道流来轮询访问令牌可选的刷新令牌的授权批准。也很受 CLI 客户端的欢迎。 我们已经介绍了使用不同参与者令牌类型的六种不同流程。

    4.5K20
    领券