【发布时间】:2020-03-13 06:19:27
【问题描述】:
我收到“远程服务器返回错误:(401) 未经授权。”使用 servicestack utils 调用远程 API 时。它需要基本身份验证或 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
玩弄它。我可以通过直接使用用户调用 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); });
我仍然不能在一个带有身份验证标头的调用中调用它,我仍然不知道为什么。
【问题讨论】: