Обмен токенов доступа LinkedIn с токеном keycloakJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Обмен токенов доступа LinkedIn с токеном keycloak

Сообщение Anonymous »

Я пытаюсь интегрировать регистрацию/вход из LinkedIn в моем приложении, которое в настоящее время использует KeyCloak для аутентификации. Я реализовал свой поток таким образом: < /p>

Мой фронт -перенаправление в LinkedIn для входа. < /Li>
LinkedIn тогда перенаправление в мой обратный вызов в бэкэнд с кодом авторизации. < /li>
Затем мое бэкэнд -приложение обменивается кодом для токена доступа и получает пользователь из LinkedIn и делает необходимый процесс. < /li>
< li> Мой бэкэнд вручную создает пользователя в KeyCloak с федеративными идентификаторами, установленными в LinkedIn. /> < /ol>
Вот пример кода: < /p>

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

public JwtTokenResponse processOAuthCallbackAndGetToken(String code) {
// Step 1: Exchange authorization code for an access token
String accessToken = exchangeAuthorizationCodeForAccessToken(code);

// Step 2: Fetch user info from LinkedIn
Map userInfo = fetchLinkedInUserProfile(accessToken);

// Step 3: Create users in app
if (userInfo == null) {
throw new SomeException("Error occurred while fetching user info from LinkedIn.");
}

String email = (String) userInfo.get("email");
// create user in the application if needed

// Step 4: Create use in keycloak with federatedIdentity

log.info("User Info from LinkedIn ::: {}", userInfo);
Map federatedIdentity = new HashMap();
federatedIdentity.put("identityProvider", "linkedin");
federatedIdentity.put("userId", userInfo.get("sub")); // LinkedIn user ID
federatedIdentity.put("userName", email);

userService.createKeycloakUserWithFederatedIdentity(agentByEmail.getUser(), federatedIdentity);

log.info("Created user in keycloak with federated identity ::: {}", federatedIdentity);

// Step 5: Exchange LinkedIn access_token with jwt
return keycloakAuthServerConnector.getTokenFromLinkedInAccessToken(accessToken);
}
< /code>
....
private static final String GRANT_TYPE_OAUTH_TOKEN_EXCHANGE =
"urn:ietf:params:oauth:grant-type:token-exchange";
private static final String REQUESTED_TOKEN_TYPE =
"urn:ietf:params:oauth:token-type:access_token";
public static final String PROTOCOL_OPENID_CONNECT_TOKEN = "/protocol/openid-connect/token";

public com.agencyheight.dto.onboardingv2.auth.JwtTokenResponse getTokenFromLinkedInAccessToken(
String accessToken) {
log.info("Requesting token with linkedIn access token :: {}", accessToken);

return webClient
.post()
.uri(PROTOCOL_OPENID_CONNECT_TOKEN)
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(
BodyInserters.fromFormData("client_id", clientId)
.with("client_secret", clientSecret)
.with("grant_type", GRANT_TYPE_OAUTH_TOKEN_EXCHANGE)
.with("subject_token", accessToken)
.with("subject_issuer", "linkedin")
.with("requested_token_type", REQUESTED_TOKEN_TYPE))
.retrieve()
.bodyToMono(com.agencyheight.dto.onboardingv2.auth.JwtTokenResponse.class)
.block();
}
Я получаю этот ответ от keycloak при попытке обменять токен.
Статус: 400 неверный запрос

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

{
"error": "invalid_token",
"error_description": "invalid token"
}
Я добавил необходимую конфигурацию в keycloak:
Изображение
Я также включил разрешение на обмен токенов и установил политику согласно этому документу: Предоставление разрешения на обмен
Изображение

Что мне не хватает или что вызывает ошибку?

Подробнее здесь: https://stackoverflow.com/questions/793 ... loak-token
Ответить

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

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

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

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

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