【问题标题】:Python - "client_id" is missing. How to solve?Python - 缺少“client_id”。怎么解决?
【发布时间】:2019-08-02 22:22:26
【问题描述】:

我一直在使用 LinkedIn api (OAuth 2),并找到了一个示例来帮助测试它。我已按照教程进行操作,但由于某种原因,当我提供完整的重定向 URL(按照代码中的要求)时,出现错误:(invalid_request) A required parameter "client_id" is missing。我不确定我做错了什么,但如果有人有任何想法,我感谢您的反馈。

在寻找解决方案时,我发现另一个人正在为此苦苦挣扎:"client_id" is missing when authenticate with 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 教程中使用的链接是正确且最新的。

【问题讨论】:

    标签: python django linkedin django-allauth linkedin-api


    【解决方案1】:

    这个有点旧,但我想我会从 oauth requests 文档网站分享一些需要对 LinkedIn 示例进行的额外更改。

    随着更新的链接,LinkedIn 似乎在用验证器代码交换令牌时期望请求正文中的client_id。我不确定它在何处或何时被遗忘,但在深入了解 oauth-request 源代码后,我发现fetch 方法有一个参数,它强制将client_id 包含在请求正文中(@987654324 @) 将它添加到 fetch 方法应该可以使示例工作。

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

    【讨论】:

      【解决方案2】:

      问题在于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)
      

      希望对你有帮助!

      【讨论】:

        【解决方案3】:

        虽然这可能不是您的问题的原因,但您使用的是旧版本的 LinkedIn 身份验证 URL。从 LinkedIn 的 OAuth 文档 (https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin/consumer/context) 你的 authorzation_base_url 应该是

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

        【讨论】:

          猜你喜欢
          • 2021-11-05
          • 1970-01-01
          • 1970-01-01
          • 2013-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-08
          • 2021-12-03
          相关资源
          最近更新 更多