2015-11-05 120 views
1

我正在使用PostMan來診斷我的Angular/NodeJS應用程序出現奇怪的400錯誤。400使用授權使用者令牌時的錯誤請求

我試圖讓https://example.com/login.html和請求有兩個頭:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...==Accept: text/html

這會返回一個錯誤400 Bad Request(服務器:CloudFlare的-nginx的)

這工作正常(返回200)如果:

  • 我訪問該文件在我的本地環境上http://localhost:5000/login.html(無HTTPS因素?) - 或 -

  • 我從頭部取出Authorization: Bearer

如果我看我的NodeJS服務器日誌,我不甚至看不到請求。所以/login.html甚至沒有被擊中,我假設因爲Express在我的app.use(logger('dev'));選擇它之前拒絕它。

更新:我相信Cloudflare在請求到達Heroku之前已經用400踢它。

數點:

  • 我用的智威湯遜在承載令牌來自於對用戶進行認證,這是。

  • 如果我使用承載令牌訪問其他端點(如/profile),它會使用用戶配置文件正確響應以解碼令牌。

我的問題是:

  • 爲什麼會變成這樣的要求是一個「錯誤的請求」時,它可以在其它端點?

  • 有沒有辦法在返回400之前捕獲該請求並執行某些操作?

回答

2

事實證明,這個問題與我實施智威湯遜有關。出於某種原因,即使令牌使用JWT.io驗證爲有效,一個用戶仍會收到導致這400個錯誤的令牌。

我做了兩個固定的那個問題顯著的變化:

  1. 我被嵌入令牌有效載荷的完整的用戶配置文件(長JSON)。由於性能方面的原因(尺寸小得多),以及在複雜有效載荷中出現問題導致問題時,我將它縮減爲只是其用戶標識。

  2. 我在我的節點實現中從JWT-Simple切換到jsonwebtoken

我很高興工作。我的下一步是從'授權'切換到'x-encoded-auth'或其他一些自定義名稱。

+0

從這個cloudflare的任何文檔? –

+0

@Simon_Weaver不是我所知道的.. –

+0

我想我有一些破壞身份驗證的SSL問題。當我沒有使用SSL訪問時,它正在工作 - 所以希望用戶配置文件的大小不是問題 –

0

@詹姆斯,我沒有足夠的聲望發表評論你的回答,但我認爲這對其他人在處理這個問題時有幫助,以表明你的建議是減少簽名用戶的複雜性/大小的確導致解決了我正在經歷的類似問題。無論如何,這都在我的性能優化清單上 - 但我並沒有想到在這種情況下它可能是錯誤的原因 - 所以你應該得到信用......謝謝!

對於讀者 - 有這一些有用的鏈接,以便線程有關令牌最大尺寸:What is the maximum size of JWT token?

這是一個工具,我用它來檢查生成的令牌有效性... https://www.base64decode.org/

希望這證明從評論升級到答案!

+0

老兄,你的使用搬運工羅賓遜封面作爲你的頭像證明你的升級(IMO)! –

相關問題