Добавил пример с Oauth2

This commit is contained in:
Struchkov Mark 2023-02-11 21:29:48 +03:00
parent 2f4231b5c8
commit e91208a7d0
No known key found for this signature in database
GPG Key ID: A3F0AC3F0FA52F3C
5 changed files with 83 additions and 2 deletions

View File

@ -26,6 +26,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui --> <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui -->
<dependency> <dependency>

View File

@ -1,8 +1,11 @@
package org.sadtech.example.swagger.config; package org.sadtech.example.swagger.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Contact; import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info; import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
/** /**
* @author upagge 30.12.2020 * @author upagge 30.12.2020
@ -18,6 +21,24 @@ import io.swagger.v3.oas.annotations.info.Info;
) )
) )
) )
//@SecurityScheme(
// name = "Oauth2",
// type = SecuritySchemeType.OAUTH2,
// flows = @OAuthFlows(
// authorizationCode = @OAuthFlow(
// tokenUrl = "https://oauth.mocklab.io/oauth/token",
// refreshUrl = "https://oauth.mocklab.io/oauth/token",
// authorizationUrl = "https://oauth.mocklab.io/oauth/authorize",
// scopes = {@OAuthScope(name = "profile"), @OAuthScope(name = "email")}
// )
// )
//)
@SecurityScheme(
name = "jsessionid",
in = SecuritySchemeIn.COOKIE,
type = SecuritySchemeType.APIKEY,
paramName = "JSESSIONID"
)
public class OpenApiConfig { public class OpenApiConfig {
} }

View File

@ -0,0 +1,28 @@
package org.sadtech.example.swagger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.cors().disable()
.oauth2Login()
.and()
.authorizeHttpRequests(
registry -> registry
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html")
.permitAll()
.anyRequest().authenticated()
)
.build();
}
}

View File

@ -2,6 +2,7 @@ package org.sadtech.example.swagger.controller;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.sadtech.example.swagger.dto.UserDto; import org.sadtech.example.swagger.dto.UserDto;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -56,9 +57,12 @@ public class UserController {
return HttpStatus.OK; return HttpStatus.OK;
} }
@SecurityRequirement(name = "jsessionid")
@GetMapping(value = "{key}", produces = APPLICATION_JSON_VALUE) @GetMapping(value = "{key}", produces = APPLICATION_JSON_VALUE)
@Operation(summary = "Получить пользователя") @Operation(summary = "Получить пользователя")
public ResponseEntity<UserDto> getSimpleDto(@PathVariable("key") String key) { public ResponseEntity<UserDto> getSimpleDto(
@PathVariable("key") String key
) {
return ResponseEntity.ok(repository.get(key)); return ResponseEntity.ok(repository.get(key));
} }

View File

@ -1 +1,25 @@
#springdoc:
# swagger-ui:
# oauth:
# client-id: mocklab_oidc
# client-secret: whatever
spring:
security:
oauth2:
client:
registration:
mocklab:
provider: mocklab
client-authentication-method: basic
authorization-grant-type: authorization_code
scope: profile, email
redirect-uri: http://localhost:8080/login/oauth2/code/
clientId: mocklab_oidc
clientSecret: whatever
provider:
mocklab:
authorization-uri: https://oauth.mocklab.io/oauth/authorize
token-uri: https://oauth.mocklab.io/oauth/token
user-info-uri: https://oauth.mocklab.io/userinfo
user-name-attribute: sub
jwk-set-uri: https://oauth.mocklab.io/.well-known/jwks.json