Безопасность Spring с OAuth2 и Github, позволяющая разработчикам в организации использовать только определенные API - PullRequest
0 голосов
/ 05 марта 2020

У меня есть набор apis, которые я хочу использовать только разработчикам в github. Для аутентификации пользователя я использовал OAuth из github. Но использование Spring Security с oauth, похоже, не делает этого, поскольку позволяет разработчикам, не входящим в организацию, использовать его. Как я go об этом?

1 Ответ

0 голосов
/ 02 мая 2020

Похоже, что spring.io учебник содержит пример для этого конкретного случая использования:

@Bean
public OAuth2UserService<OAuth2UserRequest, OAuth2User> oauth2UserService(WebClient rest) {
    DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
    return request -> {
        OAuth2User user = delegate.loadUser(request);
        if (!"github".equals(request.getClientRegistration().getRegistrationId())) {
            return user;
        }

        OAuth2AuthorizedClient client = new OAuth2AuthorizedClient
                (request.getClientRegistration(), user.getName(), request.getAccessToken());
        String url = user.getAttribute("organizations_url");
        List<Map<String, Object>> orgs = rest
                .get().uri(url)
                .attributes(oauth2AuthorizedClient(client))
                .retrieve()
                .bodyToMono(List.class)
                .block();

        if (orgs.stream().anyMatch(org -> "spring-projects".equals(org.get("login")))) {
            return user;
        }

        throw new OAuth2AuthenticationException(new OAuth2Error("invalid_token", "Not in Spring Team", ""));
    };
}
...