Как проверить токен доступа OAuth2 с сервера ресурсов

У меня есть сервер авторизации и сервер ресурсов как два разных объекта. Я вызываю REST API с токеном доступа в заголовке. Я хочу проверить действительность АТ, активен он или нет?

Я немного погуглил и обнаружил, что мы можем проверить токен доступа, используя конечную точку самоанализа токена, для которой также требуются ClientID и clientsecret. Но в остальном API я не передаю эту информацию (т.е. clientID и clientsecret).

2 ответа

Ответ будет зависеть от формата токена доступа. Если это JWT, что является предпочтительным вариантом, используйте код, подобный этому:

      @Configuration
public class SecurityConfiguration {
    
    @Bean
    public SecurityFilterChain filterChain(final HttpSecurity http) throws Exception {

        http
            .antMatcher("/api/**")
            .authorizeRequests(authz -> authz
                .anyRequest().authenticated())
            .oauth2ResourceServer().jwt();

        return http.build();
    }
}

Наряду с конфигурацией, подобной этой:

      spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: https://login.example.com/.well-known/jwks.json

САМОСПЕКЦИЯ

Если ваш API получает ссылочный токен, например, в формате UUID, вместо этого потребуется самоанализ.

Spring имеет аналогичный вариант для реализации этого, хотя чаще это делается в шлюзе API, размещенном перед API, а не в собственном коде API.

Интроспекция обычно сопровождается кешированием результата интроспекции, чтобы не забивать сервер авторизации, который обычно является критическим компонентом.

Во-первых, лучше понять типы аутентификации, IDP, типы токенов и типы грантов, шлюзы API, чтобы получить четкое представление о потоке аутентификации высокого уровня.

В структуре OAuth[1] существуют разные типы грантов.

Тип предоставления учетных данных клиента[2] — это один из типов предоставления.

Если вам необходимо следовать стандартному механизму проверки подлинности, лучше использовать поставщика удостоверений для создания токенов и их проверки. (Можно реализовать самостоятельно, но проще использовать уже реализованный)

Существуют различные типы типов токенов.

  1. JWT[3] — это автономные токены. Идеально использовать токены доступа JWT в качестве учетных данных API, поскольку токены доступа JWT могут содержать утверждения (данные), которые используются для проверки подлинности и авторизации запросов. Для этого не нужна конечная точка самоанализа, поскольку сам токен содержит информацию для проверки токена.

  2. Непрозрачные токены доступа[4] — непрозрачный или ссылочный токен — это случайная и уникальная строка символов, которая была выдана службой токенов в качестве идентификатора для использования в целях аутентификации API. Эти токены не несут никакой информации, связанной с пользователем, поэтому необходимо открыть обратный канал для службы проверки токена, чтобы проверить его и получить информацию о токене. Для этого ему нужна конечная точка самоанализа

Для защиты ваших API будет легко использовать уже разработанный шлюз API (существует множество шлюзов API[5]). Интеграция шлюза API с вашими API предоставит возможность повысить безопасность ваших API. Благодаря этому вам не нужно беспокоиться о реализации аутентификации для ваших API.

[1] https://is.docs.wso2.com/en/6.0.0/references/concepts/authorization/grant-types/

[2] https://is.docs.wso2.com/en/6.0.0/references/concepts/authorization/client-credential-grant/

[3] https://apim.docs.wso2.com/en/latest/design/api-security/oauth2/access-token-types/jwt-tokens/

[4] https://apim.docs.wso2.com/en/3.1.0/learn/api-security/oauth2/access-token-types/opaque-tokens/

[5] https://apim.docs.wso2.com/en/latest/get-started/overview/

Другие вопросы по тегам