Клиент Oauth2 веснойJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Клиент Oauth2 весной

Сообщение Anonymous »

Я пишу здесь, потому что не могу получить рабочий пример реализации клиента oauth2 в весенней загрузке 3.5.7.

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

Я пытаюсь понять, что делать, просматривая документацию здесь.
Мне предоставили 2 API:
  • grant_type -> client_credentials
  • client_secret -> mysecret
  • область -> openid
  • client_id -> имя_моей компании
    ответ:
  • access_token
  • Токен на предъявителя access_token
Вот шаги, которые я выполнил:
  • создайте приложение весенней загрузки с oaut2client и стартовым веб-сайтом
  • yaml-файл следующим образом:

    Код: Выделить всё

    security:
    oauth2:
    client:
    registration:
    my-client:
    provider: my-provider
    client-id: mycompanyname
    client-secret: mysecret
    authorization-grant-type: client_credentials
    scope: openid
    provider:
    day-provider:
    token-uri: https://myapi/.../openid-connect/token
    
  • затем я следую этой части

    поэтому я настраиваю следующие bean-компоненты

    Код: Выделить всё

    @Bean
    public OAuth2AccessTokenResponseClient accessTokenResponseClient() {
    return new RestClientClientCredentialsTokenResponseClient();
    }
    
    Я не думаю, что мне нужно настраивать свой запрос/ответ, поэтому я перехожу к созданию следующего bean-компонента

    Код: Выделить всё

    @Bean
    public OAuth2AuthorizedClientManager authorizedClientManager(
    ClientRegistrationRepository clientRegistrationRepository,
    OAuth2AuthorizedClientRepository authorizedClientRepository) {
    
    OAuth2AuthorizedClientProvider authorizedClientProvider =
    OAuth2AuthorizedClientProviderBuilder.builder()
    .clientCredentials()
    .build();
    
    DefaultOAuth2AuthorizedClientManager authorizedClientManager =
    new DefaultOAuth2AuthorizedClientManager(
    clientRegistrationRepository, authorizedClientRepository);
    authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
    
    return authorizedClientManager;
    }
    
    Затем, когда я создам

    Код: Выделить всё

    @Controller
    public class OAuth2ClientController {
    
    @Autowired
    private OAuth2AuthorizedClientManager authorizedClientManager;
    
    @GetMapping("/")
    public String index(Authentication authentication,
    HttpServletRequest servletRequest,
    HttpServletResponse servletResponse) {
    
    OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId("okta")
    .principal(authentication)
    .attributes(attrs -> {
    attrs.put(HttpServletRequest.class.getName(), servletRequest);
    attrs.put(HttpServletResponse.class.getName(), servletResponse);
    })
    .build();
    OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest);
    
    OAuth2AccessToken accessToken = authorizedClient.getAccessToken();
    
    // ...
    
    return "index";
    }
    }
    
    и я попытаюсь получить доступ к конечной точке "/", но получу исключение:

    Код: Выделить всё

    IllegalArgumentException: principal cannot be null.
    если я попытаюсь получить доступ к /oauth2/authorization/my-client, вместо этого я получу это исключение

    Код: Выделить всё

    Invalid Authorization Grant Type (client_credentials) for Client Registration with Id: my-client
    И, конечно, если я попытаюсь получить доступ ко второму API, я снова получу исключение.

    Я не использую реактивное программирование, поэтому не использую Spring WebClient

    Код: Выделить всё

    @RestController
    public class TestController {
    private final RestClient restClient;
    
    public TestController(RestClient restClient) {
    this.restClient = restClient;
    }
    
    @GetMapping("/sites")
    public SiteListResponse listaLocali(@RequestParam String vat) {
    return this.restClient.get()
    .uri("https://anotherapi/mylist?vat_number="  + vat)
    .attributes(clientRegistrationId("my-client"))
    .retrieve()
    .body(SiteListResponse.class);
    }
    }
    
    Я не самый быстрый ученик, я больше обучаюсь визуально, и поначалу мне трудно понять документацию, поэтому, пожалуйста, не будьте злыми, спасибо.

    Я пытался просмотреть некоторые видео, подобные этому, но, похоже, это не помогло решить мою проблему.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-spring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»