1
votes

Python - "client_id" est manquant. Comment résoudre?

J'ai joué avec l'API LinkedIn (OAuth 2) et j'ai trouvé un exemple pour vous aider à la tester. J'ai suivi le tutoriel à la lettre, mais pour une raison quelconque lorsque je fournis mon URL de redirection complète (comme demandé dans le code), j'obtiens l'erreur: (invalid_request) Un paramètre obligatoire "client_id" est manquant code>. Je ne suis pas sûr de ce que je fais mal, mais si quelqu'un a une idée, j'apprécie les commentaires.

En recherchant une solution, j'ai trouvé une autre personne aux prises avec ceci: "client_id "est manquant lors de l'authentification avec LinkedIn

Voici le code de l'exemple:

Linkedin.py

from requests_oauthlib import OAuth2Session
from requests_oauthlib.compliance_fixes import linkedin_compliance_fix

# Credentials you get from registering a new application
client_id = SECRET
client_secret = SECRET

# OAuth endpoints given in the LinkedIn API documentation
authorization_base_url = 'https://www.linkedin.com/uas/oauth2/authorization'
token_url = 'https://www.linkedin.com/uas/oauth2/accessToken'

linkedin = OAuth2Session(client_id, redirect_uri='http://localhost:8000')
linkedin = linkedin_compliance_fix(linkedin)

# Redirect user to LinkedIn for authorization
authorization_url, state = linkedin.authorization_url(authorization_base_url)
print ('Please go here and authorize,', authorization_url)

# Get the authorization verifier code from the callback url
redirect_response = input('Paste the full redirect URL here:')

# Fetch the access token
linkedin.fetch_token(token_url, client_secret=client_secret,authorization_response=redirect_response)

# Fetch a protected resource, i.e. user profile
r = linkedin.get('https://api.linkedin.com/v1/people/~')
print (r.content)

Lien vers l'exemple: https://requests-oauthlib.readthedocs.io/en/latest/examples/linkedin.html

Note supplémentaire: le didacticiel que j'ai utilisé n'avait pas de date dessus. Je ne peux que supposer que les liens utilisés dans le didacticiel de l'API sont corrects et à jour.


0 commentaires

3 Réponses :


0
votes

Bien que ce ne soit peut-être pas la raison de votre problème, vous utilisez une ancienne version des URL d'authentification de LinkedIn. À partir de la documentation OAuth de LinkedIn ( https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin/consumer/context ) votre authorziation_base_url devrait être

https://www.linkedin.com/oauth/v2/authorization


0 commentaires

1
votes

Le problème vient des URL , j'ai écrit un programme similaire et cela a parfaitement fonctionné pour moi:

from requests_oauthlib import OAuth2Session
from requests_oauthlib.compliance_fixes import linkedin_compliance_fix


# Credentials you get from registering a new application
client_id = '<the client id you get from linkedin>'
client_secret = '<the client secret you get from linkedin>'
redirect_url = '<authorized redirect URL from LinkedIn config>'

# OAuth endpoints given in the LinkedIn API documentation (you can check for the latest updates)
authorization_base_url = 'https://www.linkedin.com/oauth/v2/authorization'
token_url = 'https://www.linkedin.com/oauth/v2/accessToken'

# Authorized Redirect URL (from LinkedIn configuration)
linkedin = OAuth2Session(client_id, redirect_uri=redirect_url)
linkedin = linkedin_compliance_fix(linkedin)

# Redirect user to LinkedIn for authorization
authorization_url, state = linkedin.authorization_url(authorization_base_url)
print('Please go here and authorize,', authorization_url)

# Get the authorization verifier code from the callback url
redirect_response = input('Paste the full redirect URL here:')

# Fetch the access token
linkedin.fetch_token(token_url, client_secret=client_secret,
                     authorization_response=redirect_response)

# Fetch a protected resource, i.e. user profile
r = linkedin.get('https://api.linkedin.com/v1/people/~')
print(r.content)

J'espère que cela aide!


0 commentaires

2
votes

Celui-ci est un peu vieux, mais j'ai pensé partager quelques modifications supplémentaires qui doivent être apportées à l'exemple LinkedIn à partir du site de documentation oauth requests.

Avec les liens mis à jour, il semblerait que LinkedIn soit attend le client_id dans le corps de la requête lors de l'échange du code du vérificateur contre un jeton. Je ne sais pas exactement où ni quand il est laissé pour compte, mais après avoir exploré le code source oauth-request, j'ai trouvé que la méthode fetch avait un argument qui force le client_id à inclure dans le corps de la requête ( include_client_id ) en l'ajoutant à la méthode d'extraction devrait faire fonctionner l'exemple.

linkedin.fetch_token(token_url, client_secret=client_secret,
                     authorization_response=redirect_response,
                     include_client_id=True)


0 commentaires