我有一个WebApi使用基本身份验证很好。而且我有一个使用Forms Auth的MVC网站。但有以下几点:ASP.NET MVC与表单身份验证和WebApi与基本身份验证
客户端X拥有一个专用数据库,包含任意数量的联系人和产品。 MVC站点是他们的专用站点(通过{clientId}路由),允许他们的联系人登录(通过Forms Auth)并为他们的产品下订单。联系人必须以表格形式登录才能下订单。
产品订单(需要)击中WebApi以记录在客户数据库中。
但是由于WebApi使用基本身份验证来验证客户端,而不是发送订单的联系人,所以每个请求返回401 - 未经授权。
我检查出了ThinkTecture的建议,因为这里的许多帖子都是这样,但它没有让我得到我需要的,因为我没有在WebApi中允许Forms Auth。我不想在WebApi中验证客户端数据库中的联系人,我想在WebApi中验证客户端。
有没有人遇到类似的情况,我错过了明显的东西?也许我需要在网站上实现Forms和Basic?
非常标准的API调用,我从网站制作(其中用户名和密码是客户的,而不是联系的):
var clientId = new Guid(RouteData.Values["clientId"].ToString());
var baseUrl = ConfigurationManager.AppSettings["ApiBaseAddress"];
var authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", _shoppingCartSettings.UserName, _shoppingCartSettings.Password)));
var requestUrl = String.Format("api/{0}/inventory", clientId.ToString());
var httpWebRequest = WebRequest.Create(baseUrl + requestUrl);
httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + authHeader);
httpWebRequest.Method = "GET";
httpWebRequest.Accept = "application/json";
httpWebRequest.ContentType = "application/json";
try
{
using (var httpWebResponse = httpWebRequest.GetResponse())
{
// we never get here because of a 401
}
}
catch (WebException ex)
{
using (var httpWebResponse = ex.Response)
{
// we always get here
}
}
如果我成立了一个独立的测试客户端并进行相同的电话,它很好:/
是的,他们肯定是在独立的虚拟目录与自己的配置。 MVC网站设置为“Forms”,WebApi在web.configs中设置为“None”。 – McCee
感谢您的正确方向。明白了。 – McCee