我对WebApi和MVC有点困惑。 我创建了一个空白的WebApi项目,并选择了个人用户帐户作为身份验证方法。
这生成了 AccountController:ApiController 类。这里有注册,获取用户信息等方法,但没有登录方法。
MVC用户应该如何登录?
干杯, / r3plica
答案 0 :(得分:0)
在默认Web Api模板中,使用OWIN中间件对用户进行身份验证。
在Startup.Auth.cs中,您可以找到有关身份验证的URL的配置信息。
static Startup()
{
PublicClientId = "self";
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token") - this url for get token for user,
Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
}
在参数中使用用户名和密码向TokenEndPointPath发送请求后,OWIN中间件调用方法GrantResourceOwnerCredentials在ApplicationOAuthProvider中使用用户帐户在默认模板中实现。在此方法中,您可以检查用户名和密码并授予用户访问权限。 / p>
您可以在下面找到此方法的默认实现。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
using (UserManager<IdentityUser> userManager = _userManagerFactory())
{
IdentityUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await userManager.CreateIdentityAsync(user,
context.Options.AuthenticationType);
ClaimsIdentity cookiesIdentity = await userManager.CreateIdentityAsync(user,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
}