GET 请求在浏览器中有效,但在使用 Postman 时我得到了未经授权
Posted
技术标签:
【中文标题】GET 请求在浏览器中有效,但在使用 Postman 时我得到了未经授权【英文标题】:GET request works in browser, but I get Unauthorized when using Postman 【发布时间】:2017-09-20 12:19:09 【问题描述】:我正在通过 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 / 2MAaAByAGwAYQBiAGEAZwBvAHIAZABvAG4ASABPAFUALQBXAFMALQBBAEcATwBSAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd0avVN8acJQKvlSN8hYrSgEBAAAAAAAAoBg7uZi80gEIIthtN5clBAAAAAACAAYARABFAFYAAQAUAEIAQQBOAEMAUgBNADIAMAAxADYABAAcAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpAG4AdAADADIAQgBBAE4AQwBSAE0AMgAwADEANgAuAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpdddddddddddddddbABhAGIALgBpAG4AdAAHAAgAoBg7uZi80gEGAAQAAgAAAAgAMAAwAAAAAAAAAAEAAAAAIAAAccTLbO5YZuNnhdCDsjPCg1YXJuNv0XuASIhHrWWBg7kKABAAAAAAAAAAAAAAAAAAAAAAAAkAPABIAFQAVABQAC8AYgBhAG4AYwByAG0AMgAwADEANgAuAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpAG4AdAAAAAAAAAAAAAAAAACtRrU1oDZ / XXRVVEUuj0yT LI> Cache-Control:max-age=0 Cookie:ReqClientId=42484e9a-f488-41a9-a016-1cd6e5820b3c 主机:myhost.... 代理连接:保持活动状态 升级不安全请求:1 User-Agent: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【问题讨论】:
当您通过 Chrome 发出请求时,您是否使用 DevTools 查看请求实际包含的内容?标头等 @MariaInesParnisari 请查看包含该信息的更新问题。非常感谢您的帮助 通过邮递员进行请求时,您是否尝试添加带有授权的标头:协商? 只添加相同的标题?结果相同 你在chrome请求中看到的cookie添加了吗? 【参考方案1】:您调用的服务器似乎需要 RFC 4559 (https://www.rfc-editor.org/rfc/rfc4559) 身份验证。更多细节在这里:https://en.wikipedia.org/wiki/SPNEGO。
在来自浏览器的 GET 请求情况下的工作方式:
-
浏览器请求所需页面
服务器响应 HTTP 401(未授权)并提供响应头 WWW-Authenticate: Negotiate。这告诉浏览器需要 RFC 4559 身份验证。
浏览器确保站点具有此操作的权限(有关配置的详细信息:https://ping.force.com/Support/PingFederate/Integrations/How-to-configure-supported-browsers-for-Kerberos-NTLM)。大多数网站在未明确列入白名单的情况下不得请求此类授权。
如果允许,浏览器会从域的 Active Directory 请求 Kerboros 票证。
Active Directory 以票证响应。
浏览器将代码转发到服务器(通过您看到的 Authotizarion: Negotiate xxxxx 标头)。
服务器与同一个 Active Directory 交互并将该票证转换为用户名和组/权限信息。
如果您尝试对服务器(可能是内部/内联网公司站点)自动请求,我不知道有什么工具可以让您执行此操作(模拟浏览器)。您最好的做法可能是某种形式的脚本(如 VBS),它将通过 COM 使用 IE,并可能为您处理此身份验证(我还没有这样做,所以不确定它是否确实有效)。
【讨论】:
【参考方案2】:首先,登录 CRM 并将标签留在原处。
进入邮递员
启用拦截器(见图)
输入网址并点击发送,就像这样。 POSTMan 会自行处理 cookie 和标头,您会看到结果。
如果您从 CRM 注销,POSTMan 显然将无法再发出请求,而是返回 401。
【讨论】:
您的意思是使用浏览器登录crm并使用浏览器的邮递员插件吗?还是您的意思是从 postman 独立客户端登录 crm? 我想补充一点,我现在已经从 POSTMan 搬到了 Boomerang,因为我更喜欢它。答案同样适用。 我向你保证,你将回到 postman,它在 *** 上有 2500 个问题,而回旋镖为 15 我经常来回切换以寻找更好的工具,所以很有可能。这并不重要,只要工作顺利完成即可。 你更喜欢回旋镖的哪一点?【参考方案3】:您正在尝试从 postman chrome 扩展程序或通过您系统上安装的 postman(基于 windows)的应用程序访问。尝试从 chrome 扩展程序获取数据。
【讨论】:
【参考方案4】:尝试在您的网址周围加上引号:
curl '[org]/api/data/v8.1/accounts?$select=name,accountid&$top=3'
&、$、= 等可能会导致问题 - 我遇到了同样的问题,解决方法是加引号
【讨论】:
【参考方案5】:我使用了以下步骤,没问题。请按照以下步骤操作:
-
打开谷歌浏览器
安装邮递员
Extention
安装 Postman 的 Interceptor
扩展
打开邮递员Extention
使用Sync
使用Interceptor
【讨论】:
【参考方案6】:这些对我有帮助。
在邮递员和托管它的页面中检查它是否是 NTLM 身份验证。
使用方法贴
用户名和密码(您已设置,不必是访问密钥)
【讨论】:
仅代码的答案被认为是低质量的:请务必说明您的代码的作用以及它如何解决问题。如果您可以在帖子中添加更多信息,它将帮助提问者和未来的读者。另请参阅解释完全基于代码的答案:meta.stackexchange.com/questions/114762/…【参考方案7】:这解决了我的问题。 在 Postman 中,我从 Authorization 选项卡中复制了 Access Token,并选择了“No Auth”类型。 然后,我转到 Headers 选项卡,在 Headers 部分下,我提供了名称为“Authorization”的新密钥,并在 Value 中传递了我的 TOKEN 前缀和 Bearer.See the below screenshot
【讨论】:
【参考方案8】:如果请求来自浏览器,则没有使用身份验证。 因此,在 Postman 中,对于身份验证,请使用 No Auth。 :-)
【讨论】:
以上是关于GET 请求在浏览器中有效,但在使用 Postman 时我得到了未经授权的主要内容,如果未能解决你的问题,请参考以下文章
使用 swift 4 发出 GET 请求在游乐场中有效,但在项目中无效
反应:API url 在 GET 请求中有效,但在 POST 请求中被更改
为啥在使用 file_get_contents() 时出现 500 错误,但在浏览器中有效?