在 Spring boot Spring security 中验证 okta 访问令牌

问题描述 投票:0回答:1

我正在尝试验证从 UI 获取的 spring-security 中的 okta 令牌。从 okta 网站我得到了以下配置来验证令牌

AccessTokenVerifier jwtVerifier = JwtVerifiers.accessTokenVerifierBuilder()
    .setIssuer("https://${yourOktaDomain}/oauth2/default")
    .setAudience("api://default")                // defaults to 'api://default'
    .setConnectionTimeout(Duration.ofSeconds(1)) // defaults to 1s
    .setReadTimeout(Duration.ofSeconds(1))       // defaults to 1s
    .build();

它也有效,但我无法从 spring-security 配置中调用上述内容,请帮助我编写 spring-security 配置来验证 spring security 中的 jwt 令牌

申请详情: Springboot2.5

Mycode:在 springsecurity 配置中(有错误并且不起作用)

@Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        
        httpSecurity.headers()
            .httpStrictTransportSecurity()
                .includeSubDomains(true)
                .maxAgeInSeconds(63072000);
        
        httpSecurity.cors().and()
                .csrf().disable()
                .authorizeRequests()
                .anyRequest()
                //.permitAll()
                .authenticated()
                .and().oauth2ResourceServer() .jwt()
                  .jwtAuthenticationConverter(jwtAuthenticationConverter())
                  .validator(oktaAccessTokenValidator());

    }
spring-boot spring-security jwt access-token okta
1个回答
0
投票

我要再次为我的首发做一些促销。

您应该看看使用此类额外启动器的优点和缺点

如果您决定不使用它,您可以在优点和缺点部分列出的教程中找到自己编写conf的说明。

如果相反,你采用我的开胃菜,你所需要的只是:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

<dependency>
    <groupId>com.c4-soft.springaddons</groupId>
    <artifactId>spring-addons-starter-oidc</artifactId>
    <version>7.1.5</version>
</dependency>
com:
  c4-soft:
    springaddons:
      oidc:
        ops:
        - iss: https://${yourOktaDomain}/oauth2/default
          # optional: adds an audience validator to JWT decoder
          aud: api://default
          authorities:
          # you may add as many JSON path as you need to use as source for Spring authorities
          # you may also apply basic transformation (prefix and case) if needed
          - path: $.groups
        resourceserver:
          permit-all:
          # what is listed here is accessible to anonymous
          - "/public"
          cors:
          # Optional CORS configuration
          - path: /**
            allowed-origin-patterns: http://localhost:4200
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
}

没有遗漏任何有关安全的内容。您甚至不需要提供令牌验证器、JWT 解码器、身份验证转换器、身份验证管理器或其他任何东西。最好的事情是它可以与任何其他 OpenID 提供商(Auth0、Keycloak、Amazon Cognito、spring-authorization-server 等)配合使用:您需要更改的只是用作权限源的私有声明的 JSON 路径.

如果您以后需要一个 OAuth2 客户端来代替或除了资源服务器之外,我的入门程序也进行了调整,并且属性的差异在 main README 中进行了解释。

© www.soinside.com 2019 - 2024. All rights reserved.