Http 在LinkedIn OAuth 2.0身份验证中获取访问令牌应该如何作为POST请求?

Http 在LinkedIn OAuth 2.0身份验证中获取访问令牌应该如何作为POST请求?,http,post,oauth,linkedin,Http,Post,Oauth,Linkedin,如果这是一个简单的问题,很抱歉 我是LinkedIn的新手,正在尝试完成OAuth 2.0过程,以在获得临时“授权码”后获得60天的“访问令牌”,如中所述 我对第3a部分——获取临时授权代码没有任何问题。我只是将用户重定向到LinkedIn URL: https://www.linkedin.com/uas/oauth2/authorization?response_type=code &client_id=Y

如果这是一个简单的问题,很抱歉

我是LinkedIn的新手,正在尝试完成OAuth 2.0过程,以在获得临时“授权码”后获得60天的“访问令牌”,如中所述

我对第3a部分——获取临时授权代码没有任何问题。我只是将用户重定向到LinkedIn URL:

https://www.linkedin.com/uas/oauth2/authorization?response_type=code
                                       &client_id=YOUR_API_KEY
                                       &scope=SCOPE
                                       &state=STATE
                                       &redirect_uri=YOUR_REDIRECT_URI
在用户授予权限后,他们将被重定向回我的应用程序,并检查返回的参数是否一切正常,并根据文档检索临时身份验证代码作为返回的表单参数之一

然而,我对如何继续执行步骤3b感到困惑——将授权代码交换为访问令牌(然后可以使用访问令牌发出API请求)。我的困惑是,即使是文档也显示了一个带有参数的典型GET URL,旁边写着“POST”。因此,我认为必须发出POST请求,而不是GET

但这是什么意思呢?为什么文档会给出带有查询参数的URL,而不是详细说明所需的POST请求,以及URL和参数在正文中的格式?我基本上只是不确定我应该如何形成步骤3b的请求

我假设我不能简单地将我的用户重定向到3b URL,就像我对3a URL所做的那样,对吗?如果我能,那就容易了

我使用的语言是服务器端JavaScript。我可以重定向。如果我知道所需的格式,我可以填写表格并提出发帖请求。我可以创建GET请求。我只是不熟悉这种情况,在这种情况下,说请求应该是这样的文档:

https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code
                                       &code=AUTHORIZATION_CODE
                                       &redirect_uri=YOUR_REDIRECT_URI
                                       &client_id=YOUR_API_KEY
                                       &client_secret=YOUR_SECRET_KEY
但同时表明这是一个POST请求

是否有一些快捷的方法可以使用该URL来发出POST请求?或者我应该理解如何将该URL转换为典型的post请求,并将所有参数放入正文中,然后只向自身发出请求

对不起,如果这是显而易见的事情。这不是我以前遇到过的事情

这里的任何帮助都将不胜感激

谢谢


doug

当遵循规范时,您应该在帖子中发送参数,并将
内容类型设置为
application/x-www-form-urlencoded
,这是一个普通的表单post,但LinkedIn也允许通过使用带有URL查询部分参数的普通GET(如示例所示)将代码交换为令牌。不建议(并且违反规范)使用GET,因为参数最终会出现在日志、浏览器历史记录中,并且GET更容易受到劫持攻击

以下是一段(编辑过的)访问LinkedIn的卷曲轨迹:

* Connected to www.linkedin.com (108.174.2.129) port 443 (#0)
...
> GET /uas/oauth2/accessToken?grant_type=authorization_code&code=<code>&redirect_uri=<url>&client_id=<id>&client_secret=<key> HTTP/1.1
> User-Agent: curl/7.39.0
> Host: www.linkedin.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< P3P: CP="CAO CUR ADM DEV PSA PSD OUR"
< Content-Type: application/json;charset=UTF-8
< Content-Language: en-US
< Content-Length: 219
< Vary: Accept-Encoding
< Date: Wed, 31 Dec 2014 11:04:55 GMT
< X-FS-UUID: 5b7c888b35f0b413d05936cac02a0000
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< X-Li-Fabric: PROD-ELA4
< Strict-Transport-Security: max-age=0
...
< 
* Connection #0 to host www.linkedin.com left intact
{"access_token":"<>","expires_in":5178866}
*已连接到www.linkedin.com(108.174.2.129)端口443(#0)
...
>GET/uas/oauth2/accessToken?授权\u类型=授权\u代码&code=
&重定向\u uri=&client\u id=&client\u secret=HTTP/1.1
>用户代理:curl/7.39.0
>主持人:www.linkedin.com
>接受:*/*
> 
将其视为一个教程,它将顺利地引导您访问令牌:)

第1步:

创建应用程序后:

写下这篇文章,我将用同样的
我已经创建了一个文件夹“/var/www/html/code”

第二步:

电话:

输入您的客户端\u id&重定向\u uri=http%3A%2F%2localhost%2Fcode&state=987654321&scope=r\u基本配置文件

答复:

您将得到不同的答复,但结构将是相同的

第三步:

curl-X POST--http1.1”“--cookie”X-Csrf-Token:987654321“-d”grant_type=authorization\u code&code=AQTnRRDM\u pmw6nn8jutickth3xmqhopnvb4udfgi7kbk7mlhie2xqcezf1ioycvdggc5mamweifd3dxznxznxznxznxznxjjjzyjaix\u UCGlIH\u pbjzg720lbk5hesre&redirect\u\u uri=http%3A%2F%2F%2F%localhost%2Fcode&client\u id=“内容类型:application/x-www-form-urlencoded”


有趣且信息丰富。我想知道为什么他们提供的特定URL违反了他们的规范。或者你的意思是它违反了OAuth 2.0规范,LinkedIn不应该允许这样做?无论如何,如果我做了一个POST请求,URL本身会是吗?谢谢。这违反了OAuth 2.0规范;POST URL只是<代码>https://www.linkedin.com/uas/oauth2/accessToken
确实如此。好的。谢谢。我会试试看。这些文档后面的下一页有点混乱。他们有一个PHP示例。我没有使用PHP,但在该示例中,他们似乎使用了整个URL和所有查询参数,但同时不知怎的指出这是一篇文章。有没有这样,我将尝试使用该URL发布文章并构造适当的正文。谢谢。我已创建了一个文件夹,并将正确的路径添加到授权重定向URL,但我在步骤2中遇到下一个错误:
重定向uri与注册值不匹配(但它确实匹配).Edit:添加新的授权URL后不要忘记按更新按钮。谢谢。这应该是公认的答案。我有一个愚蠢的问题,您指定的重定向URL是本地环境中的活动页面还是可以是任何内容@chinmayIt可以是任何内容,它只会向您发送URL(您提供的)附加params@Venki,您可以尝试使用xyz作为url,您将得到回复xyz/?code=sds&state=23谢谢