2017-02-17 42 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), 
    }, 
} 
相關問題