簡體   English   中英

GET 請求在瀏覽器中有效,但在使用 Postman 時我得到了未經授權

[英]GET request works in browser, but I get Unauthorized when using Postman

我正在通過 chrome 發出請求:

[org]/api/data/v8.1/accounts?$select=name,accountid&$top=3

我得到了合理的回應:

{
  "@odata.context":"[org]/api/data/v8.1/$metadata#accounts(name,accountid)","value":[
    {
      "@odata.etag":"W/\"769209\"","name":"Telco","accountid":"c6ed63e0-9664-e411-940d-00155d104b35"
    },{
      "@odata.etag":"W/\"752021\"","name":"Fourth Coffee","accountid":"d1eefc0a-3ebc-e611-80be-24be051ac8a1"
    },{
      "@odata.etag":"W/\"768036\"","name":"Fourth Coffee","accountid":"3cbb8d24-20bd-e611-80c0-24be051ac8a1"
    }
  ]
}

但是,當嘗試通過郵遞員執行相同的GET操作時,我得到了未經授權的 401!

我已經嘗試過完全沒有標題,以及基本身份驗證:

Authorization:Basic Y2hybGFiXxxxxxxxxxxxxxcmQxMjM=

我究竟做錯了什么? 我需要在 CRM 中進行更改以允許我從郵遞員那里進行 GET 操作嗎?

以下是 Chrome 使用的標頭(從 DevTools 獲得):

  • 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, / ;q=0.8
  • 接受編碼:gzip、deflate、sdch
  • 接受語言:en-US,en;q=0.8
  • 授權:協商 TlRMTVNTUAADAAAAGAAYAIoAAABkAWQBogAAAAwADABYAAAADgAOAGQAAAAYABgAcgAAABAAEAAGAgAAFYKI4gYBsR0AAAAPai35LURprYMgYVSwMQXi//XXRVVEUuj0yT
  • 緩存控制:max-age=0
  • Cookie:ReqClientId=42484e9a-f488-41a9-a016-1cd6e5820b3c
  • 主機:我的主機....
  • 代理連接:保持活動
  • 升級不安全請求:1
  • 用戶代理:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Mobile Safari/537.36

首先,登錄 CRM 並將選項卡留在那里。

進入郵遞員

啟用攔截器(見圖) 攔截器

輸入 URL 並點擊發送,就像這樣。 POSTMan 將自行處理 cookie 和標頭,您會看到結果。

如果您從 CRM 注銷,POSTMan 顯然將不再能夠發出請求,而是返回 401。

您調用的服務器似乎需要 RFC 4559 ( https://www.rfc-editor.org/rfc/rfc4559 ) 身份驗證。 更多細節在這里: https ://en.wikipedia.org/wiki/SPNEGO。

在來自瀏覽器的 GET 請求的情況下它的工作方式:

  1. 瀏覽器請求所需頁面
  2. 服務器響應 HTTP 401(未授權)並提供響應頭 WWW-Authenticate: Negotiate。 這告訴瀏覽器需要 RFC 4559 身份驗證。
  3. 瀏覽器確保站點具有執行此操作的權限(此處的配置詳細信息: https ://ping.force.com/Support/PingFederate/Integrations/How-to-configure-supported-browsers-for-Kerberos-NTLM)。 大多數網站在未明確列入白名單的情況下都不允許請求此類授權。
  4. 如果允許,瀏覽器會從域的 Active Directory 請求 Kerboros 票證。
  5. Active Directory 以票證響應。
  6. 瀏覽器將代碼轉發到服務器(通過您看到的 Authotizarion: Negotiate xxxxx 標頭)。
  7. 服務器與同一個 Active Directory 交互並將該票證轉換為用戶名和組/權限信息。

如果您嘗試對服務器(可能是內部/內聯網公司站點)自動請求,我不知道有什么工具可以讓您執行此操作(模擬瀏覽器)。 您最好的做法可能是某種形式的腳本(如 VBS),它將通過 COM 使用 IE 並可能為您處理此身份驗證(我沒有這樣做,所以不確定它是否確實有效)。

您正在嘗試從郵遞員 chrome 擴展程序或通過您系統上安裝的郵遞員(基於 Windows)的應用程序訪問。嘗試從 chrome 擴展程序獲取數據。

我使用了以下步驟,沒關系。 請按照以下步驟操作:

  1. 打開谷歌瀏覽器
  2. 安裝郵遞員Extention
  3. 安裝 Postman 的Interceptor擴展
  4. 打開郵遞員Extention
  5. 使用Sync
  6. 使用Interceptor

在我的.NET項目中,我的Startup.cs中有兩種不同的身份驗證方案。 我刪除了舊的並添加了它的身份驗證服務並且它工作。

嘗試在您的網址周圍加上引號:

curl '[org]/api/data/v8.1/accounts?$select=name,accountid&$top=3'

&, $, = 等可能會導致問題 - 我遇到了同樣的問題,加上引號是解決方案

這些幫助了我。

  1. 檢查它是否在郵遞員和托管它的頁面中都是 NTLM 身份驗證。

  2. 使用方法貼

  3. 用戶名和密碼(您已設置且不必是訪問密鑰)

我正面臨同樣的問題,我正在使用最新版本的PM v7.12.0。 請讓我知道如何解決此問題。

這解決了我的問題。 在 Postman 中,我從 Authorization 選項卡中復制了 Access Token,並選擇了“No Auth”類型。 然后,我移動到標題選項卡,在標題部分下,我提供了名稱為“授權”的新密鑰,並且在值中我通過了我的 TOKEN 前綴和承載。 看下面的截圖

如果請求來自瀏覽器,則不使用身份驗證。
因此,在 Postman 中,對於身份驗證,請使用無身份驗證。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM