Spring Boot и Spring Security: OAuth2

OAuth2 - это широко используемая среда авторизации, поддерживаемая Spring.

OAuth2 клиент

Если у вас есть class-path-security-oauth2-client, вы можете воспользоваться автоматической настройкой, чтобы упростить настройку клиентов OAuth2/Open ID Connect. Эта конфигурация использует свойства в OAuth2ClientProperties. Одинаковые свойства применимы как к сервлету, так и к реактивным приложениям.

Вы можете зарегистрировать несколько клиентов и поставщиков OAuth2 под префиксом spring.security.oauth2.client, как показано в следующем примере:

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=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=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=https://my-auth-server/oauth/authorize
spring.security.oauth2.client.provider.my-oauth-provider.token-uri=https://my-auth-server/oauth/token
spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=https://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=https://my-auth-server/token_keys
spring.security.oauth2.client.provider.my-oauth-provider.user-name-attribute=name

Для поставщиков OpenID Connect, которые поддерживают обнаружение OpenID Connect, конфигурация может быть еще более упрощена. Поставщик должен быть настроен с URI эмитента, который является URI, который он утверждает как Идентификатор эмитента. Например, если предоставлен uri эмитента "https://example.com", то запрос конфигурации OpenID будет сделан по адресу "https://example.com/.well-known/openid-configuration". Ожидается, что результатом будет ответ конфигурации провайдера OpenID. В следующем примере показано, как можно настроить OpenID Connect Provider с помощью Issue-URI:

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

По умолчанию OAuth2LoginAuthenticationFilter в Spring Security обрабатывает только URL-адреса, соответствующие /login/oauth2/code/*. Если вы хотите настроить 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 для обычных поставщиков

Для распространенных поставщиков OAuth2 и OpenID, включая Google, Github, Facebook и Okta, предоставляется набор настроек по умолчанию (google, github, facebook и okta соответственно).

Если вам не нужно настраивать этих поставщиков, вы можете установить для атрибута поставщика тот, для которого вам нужно вывести значения по умолчанию. Кроме того, если ключ для регистрации клиента совпадает с поддерживаемым поставщиком по умолчанию, 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


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки