30.3 OAuth2

OAuth2 는 Spring에서 지원하는 널리 사용되는 인증 프레임 워크입니다.

30.3.1 클라이언트

ㅁ만약 너의 클래스 패스에 spring-security-oauth2-client가 있다면 자동 구성 기능을 활용하여 OAuth2 / Open ID Connect 클라이언트를 쉽게 설정할 수 있습니다. 이 구성은 OAuth2ClientProperties아래의 속성을 사용합니다. 동일한 속28.3 JSON-B성이 서블릿 및 리 액티브 응용 프로그램에 모두 적용됩니다.

다음 예와 같이 spring.security.oauth2.client접두사 아래에 여러 OAuth2 클라이언트 및 공급자를 등록 할 수 있습니다.

spring.security.oauth2.client.registration.my-client-1.client-id=abcd
spring.security.oauth2.client.registration.my-client-1.client-secret=password
spring.security.oauth2.client.registration.my-client-1.client-name=Client for user scope
spring.security.oauth2.client.registration.my-client-1.provider=my-oauth-provider
spring.security.oauth2.client.registration.my-client-1.scope=user
spring.security.oauth2.client.registration.my-client-1.redirect-uri-template=https://my-redirect-uri.com
spring.security.oauth2.client.registration.my-client-1.client-authentication-method=basic
spring.security.oauth2.client.registration.my-client-1.authorization-grant-type=authorization_code

spring.security.oauth2.client.registration.my-client-2.client-id=abcd
spring.security.oauth2.client.registration.my-client-2.client-secret=password
spring.security.oauth2.client.registration.my-client-2.client-name=Client for email scope
spring.security.oauth2.client.registration.my-client-2.provider=my-oauth-provider
spring.security.oauth2.client.registration.my-client-2.scope=email
spring.security.oauth2.client.registration.my-client-2.redirect-uri-template=https://my-redirect-uri.com
spring.security.oauth2.client.registration.my-client-2.client-authentication-method=basic
spring.security.oauth2.client.registration.my-client-2.authorization-grant-type=authorization_code

spring.security.oauth2.client.provider.my-oauth-provider.authorization-uri=http://my-auth-server/oauth/authorize
spring.security.oauth2.client.provider.my-oauth-provider.token-uri=http://my-auth-server/oauth/token
spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=http://my-auth-server/userinfo
spring.security.oauth2.client.provider.my-oauth-provider.user-info-authentication-method=header
spring.security.oauth2.client.provider.my-oauth-provider.jwk-set-uri=http://my-auth-server/token_keys
spring.security.oauth2.client.provider.my-oauth-provider.user-name-attribute=name

OpenID Connect 검색 을 지원하는 OpenID Connect 제공 업체의 경우 구성을 더욱 단순화 할 수 있습니다. 공급자는 Issuer Identifier로 주장하는 URI 인 issuer-uri로 구성해야합니다 . 예를 들어, issuer-uri가 "https://example.com"이면 OpenID Provider Configuration Request 는 "https://example.com/.well-known/openid-configuration"이됩니다. 그 OpenID Provider Configuration Response결과는 다음과 같을 것으로 예상됩니다 . 다음 예제는 issuer-uri로 OpenID Connect Provider를 다음과 같이 구성하는 방법을 보여줍니다 .

spring.security.oauth2.client.provider.oidc-provider.issuer-uri = https : //dev-123456.oktapreview.com/oauth2/default/

기본적으로 스프링 시큐리티는 OAuth2LoginAuthenticationFilter는 오직 /login/oauth2/code/*와 일치하는 URL 만 처리합니다.다른 패턴을 사용 하도록 redirect-uri를 사용자 정의하려는 경우 해당 사용자 정의 패턴을 처리하기위한 구성을 제공해야합니다. 예를 들어, 서블릿 응용 프로그램의 경우 WebSecurityConfigurerAdapter같은 자신 만의 응용 프로그램을 추가 할 수 있습니다 .

public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
			.authorizeRequests()
				.anyRequest().authenticated()
				.and()
			.oauth2Login()
				.redirectionEndpoint()
					.baseUri("/custom-callback");
	}
}

일반 공급 업체를위한 OAuth2 클라이언트 등록

구글, Github에서, 페이스 북, 그리고 Okta를 포함하여 일반적인 OAuth2를 및 오픈 ID 공급자, 제공업체의 경우 Google에서는 제공ㄱ자 기본값 (google, github, facebook, 및 okta).을 제공합니다.

이러한 공급자를 사용자 지정할 필요가없는 경우 기본값을 유추해야하는 특성을 provider특성으로 설정할 수 있습니다 . 또한, 클라이언트 등록을위한 키가 기본 지원되는 프로 바이더와 일치하면 Spring Boot도 이를 추론합니다.

즉, 다음 예제의 두 가지 구성은 Google 제공 업체를 사용합니다.

spring.security.oauth2.client.registration.my-client.client-id = abcd
 spring.security.oauth2.client.registration.my-client.client-secret = password
 spring.security.oauth2.client.registration.my- client.provider = google

spring.security.oauth2.client.registration.google.client-id = abcd
 spring.security.oauth2.client.registration.google.client-secret = password

30.3.2 자원 서버

spring 부트는 다음 예제와 같이 JWK Set URI 또는 ​​OIDC Issuer URI가 지정되어있는 한 spring-security-oauth2-resource-server를 설정할 수 있습니다.

spring.security.oauth2.resourceserver.jwt.jwk-set-uri = https : //example.com/oauth2/default/v1/keys
봄 . 초.spring.security.oauth2.resourceserver.jwt.issuer-uri=https://dev-123456.oktapreview.com/oauth2/default/

서블릿 및 리 액티브 응용 프로그램 모두에 동일한 특성이 적용됩니다.

또는 서블릿 애플리케이션 용으로 자체 JwtDecoderbean을 정의 하거나 반응 형 애플리케이션 용으로 ReactiveJwtDecoderbean을 정의 할 수 있습니다 .

30.3.3 권한 부여 서버

현재 스프링 시큐리티는 OAuth 2.0 인증 서버 구현을 지원하지 않습니다. 그러나이 기능은 Spring Security OAuth 프로젝트에서 사용할 수 있습니다.이 프로젝트는 결국 Spring Security로 완전히 대체 될 것입니다. 그때까지는 spring-security-oauth2-autoconfigure 모듈을 사용하여 OAuth 2.0 인증 서버를 쉽게 설정할 수 있습니다. 지침은 해당 설명서 를 참조하십시오.

Last updated