2017-02-17 27 views
0

我在linkedin上使用登录API的应用程序。这是一个使用go和goth认证库的web应用程序。直到几天前我的应用程序正在验证用户的罚款。现在,返回此错误消息:linkedin当尝试检索配置文件信息时登录返回404

LinkedIn回应404试图获取用户信息

的应用程序已经没有几个星期更新连续运行。所以没有任何代码更改。

我应该指出,它确实给我带来的登录页面,但输入自己的用户名和密码后,将其重定向和输出上述错误

哥特OAuth的API代码位置为:https://github.com/markbates/goth/blob/master/providers/linkedin/linkedin.go

它实质上使用访问令牌调用此URL http://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline,location:(name),picture-url,email-address)

有谁知道api端点是否已更改或任何其他原因身份验证会停止工作吗?

我一直在检查博客,但没有看到有关api的更新,似乎没有一种方法可以达到linkedin开发人员支持,因为它只是指向stackoverflow。

+0

最近看到同样的问题 - 是零星的,现在失败的所有服务器实例。但是,仍然在本地计算机上工作,这表明他们正在通过Load Balancer/DNS推出一些更改,因为它们不会影响每个人...... –

回答

1

因此深入探讨这个问题后。似乎linkedin现在正在从他们的api返回http 2.0响应。

我通过编写一个我在本地机器上运行的小程序,并在服务器代码所在的aws实例上发现了这个问题。

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "net/http/httputil" 
    "net/url" 
) 

const (
    bearerToken string = "AQVJampuUSuvWs5beuCvHiJYC--" 
) 

func main() { 

    userEndpoint := "//api.linkedin.com/v1/people/~:(id,first- name,last-name,headline,location:(name),picture-url,email-address)?format=json" 

client := &http.Client{} 

req, err := http.NewRequest("GET", "", nil) 

req.URL = &url.URL{ 
    Scheme: "https", 
    Host: "api.linkedin.com", 
    Opaque: userEndpoint, 
} 

req.Header.Set("Authorization", "Bearer "+bearerToken) 
resp, err := client.Do(req) 

request, _ := httputil.DumpRequest(req, true) 

fmt.Println("request:", string(request)) 

data, _ := ioutil.ReadAll(resp.Body) 

response, _ := httputil.DumpResponse(resp, false) 

resp.Body.Close() 

fmt.Println("response:", string(response)) 

fmt.Println(err, req.URL.String(), string(data)) 
} 

在我的本地机器上运行此项时,api返回了包含配置文件数据的响应。当我跑它在AWS实例它返回404使用HTTP 2.0接头

这里是关于AWS运行此程序

请求的输出的摘录:GET https://api.linkedin.com/v1/people/~?format=json HTTP/1.1 主机:API。 linkedin.com 授权:承载AQVJampuUSuvWs5beu--

响应:HTTP/2.0 404未找到 内容长度:5530 缓存控制:无店内 内容语言:zh 内容类型:文本/ HTML 日期:2017年2月18日(星期六)03:45:21 G MT X-锂流行:PROD-lva1-H2

<!-- EF of static content included--> 
<html> 
    <head> 
    <title>404: Not Found</title> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <style type="text/css"> 
/* GLOBAL */ 

现在,如果这是一个错误的或预期的行为,但现在看来,如果走的是拿起导致LinkedIn正在返回的HTTP 2.0的回答,我不知道404.

他们的方式,我能够解决它是关闭http 2.0客户端支持自己。通过设置以下环境变量

GODEBUG = http2client = 0

在该点处,LinkedIn API返回简档信息。

我很想知道这是一个与linkedin或去的错误。希望LinkedIn的某人能加入进来。

1

几天来,我们偶尔也看到了这些错误。

从今天起,每个请求似乎都失败了 - 即使在我的本地开发机器上(生产是AWS)。

看起来像协议谈判过程中出现问题,服务器只是纾困并返回一个标准的404响应。 LinkedIn似乎不支持APLN。

我的解决办法,现在是建立一个http.Client不支持HTTP/2,像这样:

client := &http.Client{ 
    Transport: &http.Transport{ 
     TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper), 
    }, 
} 
相关问题