ASP.NET MVC WebApi 2 按令牌登录:如何区分返回代码

本文关键字:何区 代码 返回 登录 令牌 MVC NET WebApi ASP | 更新日期: 2023-09-27 18:30:51

我们在Web API 2中的新OWIN身份验证中遇到了一些问题。我们正在开发连接到API服务的移动应用程序,我们需要在登录阶段区分响应。示例:a) 错误请求,b) 找不到用户,c) 密码不正确等。

不幸的是,如果我故意发送错误的密码,/Token 终结点会返回"错误请求"HTTP 响应,因此我无法区分这两种情况。

检查 Web 代码,我认为这是我可以决定返回哪种响应的点(用户为 null),但是如何返回?

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        User 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 user.GenerateUserIdentityAsync(userManager,
           OAuthDefaults.AuthenticationType);
        ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
            CookieAuthenticationDefaults.AuthenticationType);
        AuthenticationProperties properties = CreateProperties(user.UserName, user.ID);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }

提前感谢您的帮助;)

ASP.NET MVC WebApi 2 按令牌登录:如何区分返回代码

当用户提供无效的用户名或密码或用户处于活动状态时,返回 400 错误请求是正确的方法,请在此处查看此帖子。

以及我从安全角度的建议,一旦用户尝试登录您的系统,您不应该返回问题来自哪里,换句话说,您应该返回"用户名或密码不正确"。您很少看到系统在您登录时返回不正确的输入参数,即"密码不正确"。

如果您必须实现您要求的要求,您可以构建包含(ErrorCode,ErrorDesc)的简单POCO类,并在响应中将其作为JSON对象返回,同时保持http状态代码400。对于客户端应用程序,您将在收到 400 时读取此 JSON 对象。

希望这能回答你的问题。

看起来你可以做类似的事情

context.Response.StatusCode = 401;
return;