使用PowerShell Cmdlet
封装对WebClient
的{{1}}调用,我正在尝试实施基本身份验证。我尝试了几种方法,并根据WebAPI Authentication Filter建议在WebAPI
添加过滤器。
仅供参考:由于这是一个文件上传工具,我宁愿只发送一次数据,因为文件最多可达10MB文本日志,因此我为第一次接触创建了标题。
来自WebAPI
:
PowerShell Cmdlet
运行此代码会产生401,而调试器中没有回声。
使用凭据和标题注释掉运行此代码会从Fiddler创建两条消息,一条未经授权而另一条未经授权。两者都被拒绝401 但是 private async Task<string> Run(string postBody, string Username, string Password)
{
using (var client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = Common.DefaultMediaType;
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(Username + ":" + Password));
client.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
string response;
try
{
response = await client.UploadStringTaskAsync($"{_baseAddress}/{_uriTestConPost}", postBody);
}
catch (WebException ex)
{
var webResponse = ex.Response as HttpWebResponse;
if (webResponse == null) throw ex;
WriteWarning("WebException: " + webResponse.StatusCode);
return null;
}
return response;
}
}
上的调试器显示我只是第一次尝试授权,第二次尝试是使用编码的授权标头正确形成但是被代码拒绝401没有遇到调试器。
WebAPI Controller
就像我可以验证一样简单:
ApiController
此时,我必须认为授权问题是我的public class TestReportController : ApiController
{
[HttpPost]
[McpBasicAuthenticationFilter]
public async Task<string> TestConnectionPost()
{
dynamic message = await Request.Content.ReadAsStringAsync();
return "You sent " + message.ToString();
}
}
或我的IIS设置。对于IIS,我启用了匿名和基本授权(网站的其他部分需要匿名访问)。
从我所知道的WebConfig的重要领域:
web.Config
什么阻止了拥有凭据的请求?
答案 0 :(得分:1)
看看这个:https://msdn.microsoft.com/en-us/library/aa292114(v=vs.71).aspx 这就是我理解IIS身份验证的方式。我无论如何都不是权威,但我会告诉我如何使用它以及它对我有何用处。基本上IIS上的身份验证告诉网站如何处理客户端和服务器之间的握手,但它们都使用Windows权限。 (即使匿名要求用户使用IIS默认用户帐户或有权访问该站点的用户帐户) 有ASP.NET身份验证,您可以使用Windows或Forms。当我想从数据库而不是从活动目录验证用户时,我在IIS中使用匿名身份验证,并在我的web.config中进行身份验证。凭据通过登录表单或查询字符串传递。 我最近一直在使用ASP.Net身份。它几乎可以完成整个管道,并且非常容易设置。 https://blogs.msdn.microsoft.com/webdev/2013/10/20/building-a-simple-todo-application-with-asp-net-identity-and-associating-users-with-todoes/ 那里当然有很多东西。