asp.net-mvc – WebAPI窗体身份验证SimpleMembershipProvider使用WindowsI
|
我做了什么 我正在构建一个REST-ish WebAPI应用程序.我试图在这里实现表单认证,所以客户端可以允许用户从浏览器登录/注册/注销.我使用simpleMembership,用户存储在我的应用程序的SimpleMembership数据库表中.作为第一步,我已经在我的AccountsController中实现了一个登录方法: [System.Web.Http.HttpPost]
public HttpResponseMessage LogIn(LoginModel model)
{
if (ModelState.IsValid)
{
if (User.Identity.IsAuthenticated)
{
return Request.CreateResponse(HttpStatusCode.Conflict,"already logged in.");
}
if (WebSecurity.Login(model.UserName,model.Password,persistCookie: model.RememberMe))
{
FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
//TODO: look up by id,not by name
var userProfile = _service.GetUser(WebSecurity.GetUserId(model.UserName));
return Request.CreateResponse(HttpStatusCode.OK,userProfile);
}
else
{
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
// If we got this far,something failed
return new HttpResponseMessage(HttpStatusCode.InternalServerError);
}
问题 发生了什么: >我在if(User.Identity.IsAuthenticated)上设置一个断点. 预期行为 >该方法只返回401未经授权,因为虚拟用户不存在于我的应用程序的数据库中. 组态 我认为这是一个配置问题 – 由于身份验证失败的原因,主体会自动设置为我的Windows帐户.与我的配置有关的一些细节: <authentication mode="Forms"> <forms loginUrl="~/" timeout="2880" /> </authentication> >我没有在应用程序中的任何地方启用Windows身份验证.我的web.config在上面^ 问题 >为什么断点被击中两次,而不是LogIn方法刚刚返回Unauthorized,因为最后一个“else”被击中? 更新1 我尝试注册以下处理程序: public class PrincipalHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,System.Threading.CancellationToken
cancellationToken)
{
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty),null);
Thread.CurrentPrincipal = HttpContext.Current.User;
return await base.SendAsync(request,cancellationToken);
}
}
现在,校长从来没有设置为我的Windows身份.从POSTMan(浏览器扩展),if语句被击中两次,我得到一个弹出窗口要求凭据.从Fiddler,我只是按照预期得到401未经授权. 新问题 >如何根据回应cookie中的内容设置校长,并根据我的应用程序的简单会员资格表进行身份验证? 更新2 这个帖子似乎正在让我在正确的方向 – 在我的LoginMethod中使用成员资格而不是用户: ASP.NET MVC – Set custom IIdentity or IPrincipal 将继续更新进度,但我仍然乐意提出建议/建议. 更新3 public HttpResponseMessage LogIn(LoginModel model)
{
if (ModelState.IsValid)
{
if (User.Identity.IsAuthenticated)
{
return Request.CreateResponse(HttpStatusCode.Conflict,"already logged in.");
}
if (WebSecurity.Login(model.UserName,persistCookie: model.RememberMe))
{
FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
return Request.CreateResponse(HttpStatusCode.OK,"logged in successfully");
}
else
{
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
// If we got this far,something failed
return new HttpResponseMessage(HttpStatusCode.InternalServerError);
}
public HttpResponseMessage LogOut()
{
if (User.Identity.IsAuthenticated)
{
WebSecurity.Logout();
return Request.CreateResponse(HttpStatusCode.OK,"logged out successfully.");
}
return Request.CreateResponse(HttpStatusCode.Conflict,"already done.");
}
解决方法您是否使用IIS Express进行开发?如果是这样,请在Visual Studio中单击项目并检查属性窗口.这里有一个Windows身份验证选项,我相信这是默认启用.在这里禁用它(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CookieAuthenticationOptions,ExpireTimeSpan不起作用
- .net – 使用实体框架作为数据访问层
- 身份验证 – 如何仅为ASP.NET 5中的受保护操作添加令牌验证
- asp.net – 将样式应用于CheckBoxList中的ListItems
- asp.net-core-mvc – ASP NET Core 2.0 appsettings.Develo
- asp.net-membership – Asp.net会员 – 帐户被锁定
- asp.net – 在后面的代码中无法识别嵌套的Repeater
- asp.net-mvc – 如何让ASP.NET MVC在IIS 6中运行?
- asp.net-mvc – 洋葱建筑 – 存储库与服务?
- asp.net-mvc-3 – Facebook身份验证和奇怪的重定向行为
- ASP.NET窗体身份验证和“无身份验证”子文件夹
- asp.net – .NET Signalr MapConnection已经过时
- 如果您已实施ASP.NET路由,则ASP.NET中的PageMeth
- ASP.NET MVC 3数据注释大于下载日期时间和int
- asp.net-mvc – asp.net mvc区域的默认页面
- asp.net-web-api – 如何告诉RavenDB忽略属性而不
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与
- asp.net:控件/页面的页面生命周期顺序与其中的用
- 可以按需生成ASP.NET黄色死亡屏幕(YSOD)吗?
- asp.net-mvc – 在ASP.Net MVC视图中显示/隐藏链
