Web API中的ASP.NET身份

前端之家收集整理的这篇文章主要介绍了Web API中的ASP.NET身份前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个使用新的ASP.NET身份验证的简单应用程序.由于我计划在将来有一个移动应用程序,所以我将认证放在一个Web API中,我从Razor Web页面(没有MVC或Forms)的jQuery发布.到目前为止,后期工作正常,并创建用户并将其记录在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>

登录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)
        {
            //???
        }
    }
}

解决方法

这取决于您使用的身份验证方法.大多数Web应用程序使用Form(Cookie)身份验证模块作为主验证方法.它应该适用于您的网页,但如果您想在移动应用程序的本机客户端上使用API​​,则不是最佳选择.使用web api启用cookie验证时,应该注意CSRF攻击.

假设您正在使用Cookie身份验证,您仍然有两个选择.一个是FormsAuthentication IIS模块,这是相当老的,你应该使用FormsAuthentication.SetAuthCookie登录用户.

另一种方式是OWIN cookie middleware,它用于默认的MVC 5模板来支持认证.请检查my answer如何通过OWIN API登录用户

如果您想为移动应用的Web API提供更好的身份验证故障,我建议您使用OWIN OAuth middleware启用承载令牌作为Web api的主要身份验证方法.在MVC 5 SPA模板中,它展示了一起使用它们与MVC和cookie认证一起使用的良好模式.我的博客Understanding Security Features in the SPA Template for VS2013 RC应该总结一下他们如何合作的想法.

身份框架有一个OWIN package,它实现了大部分的OWIN认证码.所以你不需要实现自己的.为什么不使用它?

猜你在找的HTML相关文章