Dra*_*eer 9 asp.net razor asp.net-web-api asp.net-identity
我正在研究一个使用新的ASP.NET身份进行身份验证的简单应用程序.由于我计划将来有一个移动应用程序,我已将身份验证放在Web API中,我从Razor Web Page(没有MVC或Forms)发布到jQuery.到目前为止,post工作正常并创建用户并将其记录在API端.
但是,我无法确定如何从那里开始.我需要设置IsAuthenticated,以便我可以提供正确的页面,但它总是返回false.由于Identity是非常新的,因此几乎没有可用的文档,我无法找到任何像从Web API运行它那么复杂的文档.
问:登录后从Web API中返回身份验证的正确方法是什么,以便User.Identity.IsAuthenticated
正确设置?
Login.cshtml
@if (User.Identity.IsAuthenticated)
{
@RenderPage("/userpage.cshtml");
}
else
{
<form id="loginForm">
<b>Login</b>
<input type="email" placeholder="Email" name="email" id="loginEmail" />
<input type="password" placeholder="Password" name="password" id="loginPassword" />
<input type="submit" value="Log In"/>
</form>
}
<script>
$("#loginForm").submit(function(event)
{
event.preventDefault();
$.post("/api/login/",
{
Username: $('#loginEmail').val(),
Password: $('#loginPassword').val()
}, function ()
{
//???
}, "json");
return false;
});
</script>
Run Code Online (Sandbox Code Playgroud)
登录Web API
public class LoginController : ApiController
{
public async void Post(UserInfo info)
{
var manager = new AuthenticationIdentityManager(new IdentityStore());
var result = await manager.Authentication.CheckPasswordAndSignInAsync(HttpContext.Current.GetOwinContext().Authentication, info.Username, info.Password, true);
if (result.Success)
{
//???
}
}
}
Run Code Online (Sandbox Code Playgroud)
Hon*_*Sun 14
这取决于您使用的身份验证方法.大多数Web应用程序使用Form(Cookie)身份验证模块作为主要身份验证方法.它应该适用于您的网页,但如果您想在本机客户端(如移动应用程序)上使用您的API,则它不是最佳选择.使用web api启用cookie身份验证时,应该小心CSRF攻击.
假设您正在使用cookie身份验证,您仍有两个选择.一个是FormsAuthentication IIS模块,它很老,你应该使用FormsAuthentication.SetAuthCookie来登录用户.
另一种方式是OWIN cookie中间件,它在默认的MVC 5模板中用于支持身份验证.请查看我的答案,了解如何通过OWIN API登录用户
如果您想为移动应用的Web API提供更好的身份验证故事,我建议您使用OWIN OAuth中间件启用持票令牌作为web api的主要身份验证方法.在MVC 5 SPA模板中,它演示了将它们与MVC和cookie auth一起使用的良好模式.我的博客了解VS2013 RC的SPA模板中的安全功能应该大致了解它们如何协同工作.
身份框架有一个OWIN包,它实现了大多数OWIN身份验证代码.所以你不需要实现自己的.为什么不用它?
归档时间: |
|
查看次数: |
16711 次 |
最近记录: |