我得到“远程服务器返回错误:(401)未授权。”当使用servicestack实用程序调用远程API时。它需要auth basic或JWT。从PostMan调用相同的API可以很好地工作。
var json = $"http://localhost:5000/API/Proxy/IsValidGuidForSetupDevice?Guid=82870f2ca21148739bff0854b306415c".GetJsonFromUrl(requestFilter: webReq => { webReq.AddBasicAuth("DevAdmin", "test1"); });如果我使用相同的用户在浏览器窗口中调用下面的函数。我得到了一个有效的连接和一个持有者令牌。用户通行证是好的。
http://localhost:5000/auth/credentials?username=DevAdmin&password=test1&format=json我是不是在Util的请求过滤器中遗漏了什么?也许我应该以不同的方式调用它,并使用不记名令牌?
使用fiddler跟踪后更新
我将代码移到了与servicestack服务相同的项目中的单元测试中。只是为了删除所有变量。
Fiddler向我展示了:No Proxy-Authenticate Header is present. WWW-Authenticate Header is present: Basic realm="/auth/apikey" GET http://localhost:5000/auth
原始视图
HTTP/1.1
Host: localhost:5000
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
DNT: 1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: http://localhost:5000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: ss-opt=perm; loginLevel=none; X-UAId=2; ss-id=XPc7ivcCrXuN5tEWwARG; ss-pid=TDeEjUiKck82foJGLGtX玩弄它。我可以通过直接调用user的URL并传递来让它登录。我拿回了持有者令牌,我就可以传递它了。
var json = $"http://localhost:5000//auth/credentials?username=DevAdmin&password=test1".GetJsonFromUrl();
var o = JsonObject.Parse(json);
var token = o.Get<string>("bearerToken");
var jsonr = $"http://localhost:5000/API/Proxy/IsValidGuidForSetupDevice?Guid=bc464658d6a640febbd53ba17c351919".GetJsonFromUrl(
requestFilter: webReq => { webReq.AddBearerToken(token); });我仍然不能用auth头在一次调用中调用它,而且我仍然不知道为什么。
发布于 2019-11-19 00:49:58
每当诊断不同客户端的HTTP请求之间的不同行为时,您应该使用Fiddler或WireShark等HTTP数据包嗅探器检查不同客户端之间的原始HTTP流量,或者如果请求是从浏览器发出的,您可以使用其内置的Web Network Inspector工具。
查看和比较原始HTTP请求/响应是识别请求差异的最佳方法。
AddBasicAuth()扩展方法允许您将HTTP Basic Auth添加到Web请求中,如果您希望改为发送JWT令牌,则可以使用AddBearerToken()方法。
https://stackoverflow.com/questions/58905090
复制相似问题