Je sais que certains mettront des commentaires comme si cet article est le double de tant de questions, mais j'ai essayé de nombreuses façons d'obtenir un jeton d'accès dans linkedin Oauth. Expliquant ce que j'ai essayé.
1) Je suis le Linkedin Oauth2 de son doc officiel
2) J'obtiens avec succès le code d'autorisation de l'étape 2 et je passe ce code à l'étape 3 pour échanger le code d'authentification pour obtenir le jeton d'accès. Mais j'obtiens l' erreur suivante {"error_description": "paramètres obligatoires manquants, inclut une valeur de paramètre non valide, paramètre plusieurs fois.: Impossible de récupérer le jeton d'accès: appId ou l'URI de redirection ne correspond pas au code d'autorisation ou au code d'autorisation expiré", "error": "invalid_request"}
3) Selon certains liens, je dois définir le type de contenu dans l'en-tête. Le lien qui indique de définir le type de contenu est manquant
4) Ensuite , j'ai essayé d' appeler https://www.linkedin.com/uas/oauth2/accessToken
ce service au lieu de POSt
à GET
. Et en passant des données en tant que queryParams.
5) Un lien dit que le code oauth expire dans 20 secondes, donc j'ai vérifié, je fais un appel pour un jeton d'accès en moins d'une seconde.
6) Et si je passe des données dans les paramètres Body comme ci-dessous et utilise l'URL comme https://www.linkedin.com/uas/oauth2/accessToken
var postData = {
grant_type: "authorization_code",
code: authCode,
redirect_uri: 'https%3A%2F%2Foauthtest-mydeployed-app-url',
client_id: 'my_client_id',
client_secret: 'secret_key'
};
7) Avec Get
appeler mon URL, j'ai essayéhttps://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='+authCode+'&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&client_id=my_client_id&client_secret=secret_key
J'obtiens toujours une erreur même si le code d'état est 200, j'obtiens cette erreur (avec GET
api) et si POSt
en passant le postData
corps, j'obtiens un mauvais 400
code d'état de demande
Je ne comprends pas pourquoi je ne reçois pas de code d'accès. J'ai lu de nombreuses solutions. Code de partage comme demandé.
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/m/MessageToast"
], function (Controller, MessageToast) {
"use strict";
return Controller.extend("OauthTest.OauthTest.controller.View1", {
onPress: function (evt) {
var sPath =
'https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=my_client_id&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&state=DCEeFWf45A53sdfKef424&scope=r_basicprofile';
window.location.href = sPath;
var oRouter = new sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("View2", {
"username": "Test"
});
MessageToast.show(evt.getSource().getId() + " Pressed");
},
//after user allows access, user will be redirected to this app with code and state in URL
//i'm fetching code from URL in below method(call is happening in max.569ms)
onAfterRendering: function () {
var currentUrl = window.location.href;
var url = new URL(currentUrl);
var authCode = url.searchParams.get("code");
if (authCode !== undefined && authCode !== null) {
var postData = {
grant_type: "authorization_code",
code: authCode,
redirect_uri: 'https%3A%2F%2Foauthtest-mydeployed-app-url',
client_id: 'my_client_id',
client_secret: 'secret_key'
};
/* var accessTokenUrl = 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code=' + authCode +'&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&client_id=my_client_id&client_secret=secret_key';*/
var accessTokenUrl = 'https://www.linkedin.com/uas/oauth2/accessToken';
$.ajax({
url: accessTokenUrl,
type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
},
data: postData,
success: function (data, textStatus, jqXHR) {
console.log(data);
alert('success');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
alert('error');
}
});
}
}
});
});
L'aide sera appréciée .. !!!
Enfin, je suis heureux de publier ma réponse après tant de recherches. Chaque étape que j'ai faite est correcte, mais une chose qui me manquait ici, comme l'API Linkedin ne prend pas en charge CORS.
J'ai essayé d'implémenter le SDK Javascript, qui fonctionne à merveille. Mais l'API ne l'était pas. Ensuite, j'ai trouvé un lien très utile qui dit que je dois implémenter l'API Rest à partir du backend en autorisant CORS, pas depuis le front-end.
Assurez-vous de suivre tous les points que j'ai mentionnés ci-dessus dans mon message. Et pour Autoriser CORS, suivez ce lien. Vous obtiendrez des données, mais seul le profil de base de l'utilisateur selon les conditions de LinkedIn peut être accessible.
J'espère que cet article peut aider quelqu'un à chercher plus
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots