Python - "client_id" отсутствует. Как решить? - PullRequest
1 голос
/ 10 марта 2019

Я играл с API LinkedIn (OAuth 2), и я нашел пример, чтобы помочь проверить это.Я следовал инструкциям к письму, но по какой-то причине, когда я предоставляю свой полный URL-адрес для перенаправления (как требуется в коде), я получаю сообщение об ошибке: (invalid_request) A required parameter "client_id" is missing.Я не уверен, что делаю неправильно, но если у кого-то есть идеи, я благодарен за отзыв.

После поиска решения я нашел другого человека, который борется с этим: "client_id "отсутствует при аутентификации с LinkedIn

Вот код из примера:

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)

Ссылка на пример: https://requests -oauthlib.readthedocs.io / en / latest / examples / linkedin.html

Дополнительное примечание: у учебника, который я использовал, не было даты.Я могу только предполагать, что ссылки, используемые в руководстве по API, являются правильными и актуальными.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Проблема с URLs, я написал похожую программу, и она отлично сработала для меня:

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)

Надеюсь, это поможет!

0 голосов
/ 11 марта 2019

Хотя это может и не быть причиной вашей проблемы, вы используете более старую версию URL-адресов аутентификации LinkedIn.Из документации OAuth LinkedIn (https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin/consumer/context) ваш authorziation_base_url должен быть

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

...