Как получить AccessToken с Spring Boot для Azure B2C - PullRequest
0 голосов
/ 21 января 2020

, чтобы сделать это снова очень понятным, доступ осуществляется через Azure B2 C. Это, очевидно, большая разница, потому что есть два разных способа доступа к нему.

Я следовал этому руководству: https://docs.microsoft.com/en-us/azure/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory-b2c-oidc

Я пробовал другое руководство раньше но это не работает для B2 C: https://docs.microsoft.com/en-us/azure/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory

Аутентификация работает нормально. Я перенаправлен на страницу входа и возвращен после успешного входа. Информацию о пользователе можно запросить у OAuth2AuthenticationToken.

. В браузере у моего приложения есть JSESSIONID.

В этом же домене есть служба REST, которую я хочу использовать непосредственно из внешнего интерфейса приложения. с Vue. js.

Так что я решил доставить AccessToken внешнему интерфейсу, который он может использовать для доступа к REST API.

Я искал и нашел относительно простой Пример: https://spring.io/blog/2018/03/06/using-spring-security-5-to-integrate-with-oauth-2-secured-services-such-as-facebook-and-github

Но когда я пытаюсь ie ввести OAuth2AuthorizedClientService:

@RequestMapping(path = "/user")
public ResponseEntity<User> test(@NonNull final OAuth2AuthenticationToken token,
        @AuthenticationPrincipal(expression = "idToken") final OidcIdToken idToken, final
OAuth2AuthorizedClientService clientService) {
    LOG.debug("GET called on /api/user resource");
    LOG.debug("OidcIdToken: {}", idToken.getTokenValue());

    final OAuth2AuthorizedClient client = clientService
            .loadAuthorizedClient(token.getAuthorizedClientRegistrationId(), token.getName());

    LOG.debug("Access: {}", client.getAccessToken().getTokenValue());

, при доступе возникает следующая ошибка:

java.lang.NoSuchMethodException: org.springframework.security.oauth2.client.OAuth2AuthorizedClientService.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_231]
    at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_231]
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]

Может кто-нибудь подсказать sh меня в правильном направлении?

Обновление

Это была моя вина. Из руководства у меня сложилось впечатление, что OAuth2AuthorizedClientService можно ввести с помощью метода.
Это не так. Это работает, только если этот класс вводится через конструктор или напрямую @inject.

Теперь у меня есть токен доступа ...

1 Ответ

0 голосов
/ 22 января 2020

OAuth2AuthorizedClientService должен быть внедрен в класс, а не как параметр метода. Смотри выше ...

...