Недействительный токен доступа Spring Boot Resource Server

У меня есть сервер ресурсов загрузки Spring, например:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
}

И конечная точка вроде этого:

@RestController
public class TestResourceOne {

    private static final Logger log = Logger.getLogger(TestResourceOne.class);

    @RequestMapping(value = "/calcsqrt")
    public Double calcSqtr(@RequestParam("value") Double value) {
        return Math.sqrt(value);
    }

    @RequestMapping(value = "/sum")
    public Double calcSqtr(@RequestParam("value1") Double value1, @RequestParam("value2") Double value2) {
        return value1 + value2;
    }
}

Мой сервер авторизации находится в Azure AD, поэтому, когда я вызываю эту конечную точку «/ calcsqrt», я передаю токен носителя, созданный Azure. Это моя просьба:

GET /serviceone/calcsqrt?value=3 HTTP/1.1
Host: localhost:8080
Authorization: Bearer MY_ACCESS_TOKEN_HERE
Cache-Control: no-cache
Postman-Token: ef5d493c-39f1-4bc4-9084-4ea510ac1255

Но весной я всегда получаю следующую ошибку:

{
    "error": "invalid_token",
    "error_description": "Invalid access token: MY_ACCESS_TOKEN_HERE"
}

Какой конвертер токенов доступа вы используете на сервере ресурсов?

amant singh 19.07.2018 09:00

Я не использую конвертер

Ronaldo Lanhellas 19.07.2018 13:05

В этом случае вам необходимо использовать некоторые службы токенов (например, RemoteTokenServices), которые вы можете использовать для проверки вашего токена.

amant singh 20.07.2018 12:20
1
3
2 401
1

Ответы 1

Кажется, ваш класс конфигурации ресурса был неправильным. Я реализовал такую ​​конфигурацию ресурсов

package com.ig.user.config;

import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;

/**
 * @author Jai
 *
 */
@Configuration
@EnableResourceServer
@EnableWebSecurity
public class ResourceConfig extends ResourceServerConfigurerAdapter {

    private final String userInfoUri = "url";

    private final String clientId = "foo";

    @Override
    public void configure(final ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("user");
    }

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/v1/user/activate/**").permitAll()//
                .anyRequest().authenticated();
    }

    @Primary
    @Bean
    public UserInfoTokenServices tokenService() {
        final UserInfoTokenServices tokenService = new UserInfoTokenServices(userInfoUri, clientId);
        return tokenService;
    }
}

РЕДАКТИРОВАТЬ-1

  • userInfoUri - это URL-адрес, который дает авторизацию для этого ресурса.
  • resourceId Для каждого сервера ресурсов мы должны создать один resourceId и тот же идентификатор, который мы должны хранить там, где вы храните данные клиента.

Надеюсь, это поможет тебе

Не могли бы вы объяснить идентификатор ресурса и UserInfoTokenServices?

Ronaldo Lanhellas 19.07.2018 13:06

При создании сервера ресурсов вы должны создать идентификатор ресурса. вы должны использовать тот же идентификатор ресурса, где вы храните данные клиента

Jay 19.07.2018 14:03

О userInfoUri. В Oauth2 у меня есть / token и / authorize, какой URL мне здесь следует использовать?

Ronaldo Lanhellas 19.07.2018 14:24

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