401 получен с помощью WebClient веснойJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 401 получен с помощью WebClient весной

Сообщение Anonymous »

У меня есть внешний API, с помощью которого я могу без проблем получить токен аутентификации и выполнить проверку связи в Postman, выполнив следующие действия:

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

    i have tested again in postman, works fine
in Postman i use :

Auth Type: OAuth 2.0

Grant type: Client Credentials

Access Token UR: the above

Client ID:above

Client Secret:above

Scope: aboce

Client Authentication: Send as Basic Auth headers

i click "Get new token" proceed and all fine,
затем я попробую этот метод весной

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

private OAuth2AuthorizedClient obtainToken(ClientRegistration clientRegistration) {
String tokenUrl = clientRegistration.getProviderDetails().getTokenUri();
String clientId = clientRegistration.getClientId();
String clientSecret = clientRegistration.getClientSecret();
String scope = "https://test.account.myconpamys/auth/gpr/.default"; // or your API's scope

WebClient webClient = WebClient.builder().build();

// Prepare the form data including client_id and client_secret
MultiValueMap formData = new LinkedMultiValueMap();
formData.add("grant_type", "client_credentials");
formData.add("client_id", clientId);
formData.add("client_secret", clientSecret);
formData.add("scope", scope);

try {
// Make the POST request
Map responseBody = webClient.post()
.uri(tokenUrl)
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromFormData(formData))
.retrieve()
.bodyToMono(new ParameterizedTypeReference() {})
.block();

if (responseBody == null || !responseBody.containsKey("access_token")) {
// Check if the response might be nested under a different key
if (responseBody != null && responseBody.containsKey("token")) {
responseBody = (Map) responseBody.get("token");
}
if (responseBody == null || !responseBody.containsKey("access_token")) {
throw new OAuth2AuthenticationException(new OAuth2Error("invalid_token"), "Failed to obtain access token");
}
}

// Extract the access token and other details
String accessTokenValue = (String) responseBody.get("access_token");
String tokenType = (String) responseBody.get("token_type");
int expiresIn = (Integer) responseBody.get("expires_in");
Instant issuedAt = Instant.now();
Instant expiresAt = issuedAt.plusSeconds(expiresIn);

OAuth2AccessToken accessToken = new OAuth2AccessToken(
OAuth2AccessToken.TokenType.BEARER,
accessTokenValue,
issuedAt,
expiresAt,
clientRegistration.getScopes()
);

return new OAuth2AuthorizedClient(clientRegistration, "my-client",
accessToken);
} catch (Exception e) {
// Log the exception, then throw an appropriate exception
throw new OAuth2AuthenticationException(new OAuth2Error("invalid_token"),
"Failed to obtain access token: " + e.getMessage(), e);
}
}
но я понимаю

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

 checkpoint ⇢ 401 UNAUTHORIZED from POST
https://login.microsoftonline.com/myid/oauth2/v2.0/token [DefaultWebClient]
|_ Mono.switchIfEmpty ⇢ at
но почему?? Я использую те же учетные данные, такие как область действия, идентификатор клиента, секрет, URL-адрес токена аутентификации в Postman, и это работает !! Какая здесь разница?

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

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

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

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

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

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