具有表单身份验证的ASP.NET MVC和具有基本身份验证的WebApi

麦基

我有一个很好地使用Basic Auth的WebApi。而且我有一个很好地使用Forms Auth的MVC网站。但是这里有个陷阱:

客户端X有一个专用数据库,其中包含任意数量的联系人和产品。MVC站点是一个专用于他们的站点(通过{clientId}路由),该站点允许其联系人登录(通过Forms Auth)并为其产品下订单。该联系人必须已正式登录才能下订单。

产品订单(需要)通过WebApi记录在客户的数据库中。

但是由于WebApi使用基本身份验证来验证客户端,而不是下订单的联系人,因此每个请求返回的都是401-未经授权。

我已经按照SO上许多帖子的建议来检查了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
    }
}

如果我设置一个单独的测试客户端并进行相同的调用,则效果很好:/

麦基

在不那么广为人知的墙上撞了很多头之后,@ 0leg急切地推了一下,我找到了原因。

在我的WebApi项目文件的“ Web>”下的“属性”中Servers,将Visual Studio Development Server其与Virtual Path“ /”一起使用,而将我的MVC项目文件设置为使用Local IIS Web ServerMVC项目也Apply server settings to all users (store in project file)选中了该选项。

设置为使用本地IIS服务器都可以解决该问题。

经过进一步的考虑,由于它们实际上运行在不同的服务器上,因此现在看来是合乎逻辑的。

为了后代的缘故发布此消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python,具有基本身份验证的HTTPS GET

具有HttpUrlConnection的抢占式基本身份验证?

具有基本身份验证的HTTP请求

ASP.NET Core中的基本身份验证

Asp.Net Core-最简单的表单身份验证

具有asp.net核心的Windows身份验证

Asp.net中的表单身份验证超时单位是什么?

具有基本身份验证的Vue资源

ASP.NET Core使用具有Cookie身份验证的自定义身份验证处理程序

如何在具有基于令牌的身份验证的ASP.Net WebAPI 2.0中使用Swagger

如何在Postman中使用ASP.NET表单身份验证

带有表单身份验证的ASP .NET Web表单的MFA提供程序

具有TokenEndpoint的基本身份验证的ASP.NET Core OAuth

具有Windows身份验证的ASP.NET Core身份

asp.net和asp.net MVC之间的表单身份验证有区别吗?

在ASP.NET MVC中隐藏默认表单身份验证URL

如何在ASP.NET中实施表单身份验证

保护ASP.NET MVC4中的视图:表单身份验证

asp.net表单身份验证有时会重定向到default.aspx

ASP.NET MVC不能与表单身份验证一起使用

ASP.NET MVC 5,通过表单身份验证使用ADMembershipProvider,向我显示了始终登录

ASP.NET表单身份验证-不重定向到任何页面

在ASP.NET MVC5中使用自定义登录进行表单身份验证

自定义ASP.NET MVC表单身份验证

ASP .NET - MVC 5 - 实体框架 - 代码优先 - 表单身份验证

是否可以在没有 web.sitemap 的情况下进行基于 ASP.NET 角色的表单身份验证和授权?

使用 asp.net 表单身份验证的单点登录不起作用

Sitecore 与 iis 表单身份验证和编码基本身份验证

使用 asp.net 中的基本身份验证覆盖 IIS Windows 身份验证