gpt4 book ai didi

Web API 中的 ASP.NET 标识

转载 作者:行者123 更新时间:2023-12-01 16:38:19 25 4
gpt4 key购买 nike

我正在开发一个使用新的 ASP.NET Identity 进行身份验证的简单应用程序。由于我计划将来有一个移动应用程序,因此我将身份验证放在了 Web API 中,我从 Razor 网页(没有 MVC 或表单)从 jQuery 发布到该 API。到目前为止,post 工作正常并创建用户并将他们登录 - 在 API 端。

但是,我无法确定如何从那里开始。我需要设置 IsAuthenticated 以便我可以提供正确的页面,但它总是返回 false。由于 Identity 非常新,因此几乎没有可用的文档,而且我无法找到任何像从 Web API 运行它这样复杂的东西。

问:登录后从 Web API 中的身份验证返回的正确方法是什么,以便 User.Identity.IsAuthenticated设置正确?

登录.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 应用程序使用表单 (Cookie) 身份验证模块作为主要的身份验证方法。它应该适用于您的网页,但如果您想在 native 客户端(如移动应用程序)上使用您的 API,它不是最佳选择。使用 web api 启用 cookie 身份验证时,您应该小心 CSRF 攻击。

假设您使用 cookie 身份验证,您仍然有两个选择。一个是FormsAuthentication IIS模块,比较老了,应该用FormsAuthentication.SetAuthCookie登录用户。

另一种方式是OWIN cookie middleware ,在默认的 MVC 5 模板中用于支持身份验证。请查看my answer关于如何通过 OWIN API 登录用户

如果您想通过移动应用程序为 Web API 提供更好的身份验证故事,我建议您使用 OWIN OAuth middleware启用不记名 token 作为 Web api 的主要身份验证方法。在 MVC 5 SPA 模板中,它演示了将它们与 MVC 和 cookie auth 一起使用的良好模式。我的博客 Understanding Security Features in the SPA Template for VS2013 RC应该大致了解它们是如何协同工作的。

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

关于Web API 中的 ASP.NET 标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com