GET请求在浏览器中有效,但在使用Postman

时间:2017-04-23 23:17:57

标签: c# http postman http-get dynamics-crm-2016

我通过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的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP, / 的; Q = 0.8
  • 接受编码:gzip,deflate,sdch
  • 接受语言:en-US,en; q = 0.8
  • 授权:协商 TlRMTVNTUAADAAAAGAAYAIoAAABkAWQBogAAAAwADABYAAAADgAOAGQAAAAYABgAcgAAABAAEAAGAgAAFYKI4gYBsR0AAAAPai35LURprYMgYVSwMQXi / 2MAaAByAGwAYQBiAGEAZwBvAHIAZABvAG4ASABPAFUALQBXAFMALQBBAEcATwBSAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd0avVN8acJQKvlSN8hYrSgEBAAAAAAAAoBg7uZi80gEIIthtN5clBAAAAAACAAYARABFAFYAAQAUAEIAQQBOAEMAUgBNADIAMAAxADYABAAcAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpAG4AdAADADIAQgBBAE4AQwBSAE0AMgAwADEANgAuAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpdddddddddddddddbABhAGIALgBpAG4AdAAHAAgAoBg7uZi80gEGAAQAAgAAAAgAMAAwAAAAAAAAAAEAAAAAIAAAccTLbO5YZuNnhdCDsjPCg1YXJuNv0XuASIhHrWWBg7kKABAAAAAAAAAAAAAAAAAAAAAAAAkAPABIAFQAVABQAC8AYgBhAG4AYwByAG0AMgAwADEANgAuAGQAZQB2AC4AYwBoAHIAbABhAGIALgBpAG4AdAAAAAAAAAAAAAAAAACtRrU1oDZ / XXRVVEUuj0yT
  • 缓存控制:最大年龄= 0
  • 曲奇:ReqClientId = 42484e9a-f488-41a9-a016-1cd6e5820b3c
  • 主持人:myhost ....
  • 代理连接:保活
  • 升级 - 不安全请求:1
  • 用户代理:Mozilla / 5.0(Linux; Android 6.0; Nexus 5 Build / MRA58N)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 57.0.2987.133 Mobile Safari / 537.36

8 个答案:

答案 0 :(得分:4)

首先,登录CRM并将标签保留在那里。

进入POSTMan

启用拦截器(见图片) interceptor

输入网址并点击SEND,就像那样。 POSTMan将自己处理cookie和标题,你会看到结果。

如果您从CRM注销,POSTMan显然将无法再发出请求,而是会返回401。

答案 1 :(得分:2)

您正在呼叫的服务器似乎需要RFC 4559(https://tools.ietf.org/html/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交互,并将该票证转换为用户名和组/权限信息。
  8. 如果您尝试自动化针对服务器的请求(可能是内部/内部网公司站点),我不知道有一个工具可以让您这样做(模拟浏览器)。您最好的行动方案可能是某种形式的脚本(如VBS),它将通过COM使用IE并可能为您处理此身份验证(我没有这样做,因此不确定它是否确实有用)。

答案 2 :(得分:1)

您正尝试从邮递员Chrome扩展程序或通过系统上的postman(基于Windows)安装的应用程序进行访问。尝试从chrome扩展程序中获取数据。

答案 3 :(得分:1)

我使用了以下步骤,没关系。

1。打开Goog​​le Chrome

2。安装Postman Extension

3。安装Postman的拦截器扩展

4.Open Postman Extension

5。使用同步

6。使用拦截器

答案 4 :(得分:0)

尝试在网址周围加上引号:

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

&,$,=等可能引起问题-我也遇到了同样的问题,而引号是解决方法

答案 5 :(得分:0)

这些帮助了我。

  1. 在邮递员和托管页面中检查它是否为NTLM身份验证。

  2. 使用方法发布

  3. 用户名和密码(您已设置并且不需要作为访问密钥)

答案 6 :(得分:0)

这解决了我的问题。 在邮递员中,我从“授权”选项卡中复制了访问令牌,并且选择了“无身份验证”类型。 然后,我转到“标题”选项卡的“标题下”部分,提供了名称为“ Authorization”的新密钥,并在“值”中传递了带有Bearer的TOKEN前缀。See the below screenshot

答案 7 :(得分:0)

如果浏览器的请求有效,则不使用身份验证。
因此,在邮递员中,对于身份验证,请使用“无身份验证”。 :-)