【问题标题】:Web app with REST api data layer具有 REST api 数据层的 Web 应用程序
【发布时间】:2016-10-25 06:45:05
【问题描述】:

我需要有一个 RESTful API,我可以从 MVC5 Web 应用程序调用它来最初只针对本地 sql 服务器进行简单的身份验证/授权。我需要能够将登录凭据从 Web 应用程序传递到 api 以获取标头令牌等。然后我需要能够检查令牌以获取任何请求以提取数据或将数据保存回数据库。我现在正在使用教程示例应用程序Here,直到我了解其功能。

web 端只是一个带有按钮的表单和一些 jquery 来捕捉被点击的提交按钮:

$(document).ready(function () {

    var register = function() {
        var dataa = {
            Email: "password@host.com",
            Password: "password",
            ConfirmPassword: "password"
        };

        $.ajax({
            type: 'POST',
            url: 'api/Account/Register',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(dataa)
        });
        return false;
    }

    $('#btnRegister').click(register);
});

然后这里是 api 本身的控制器:

[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        return Ok();
    }
}

当我尝试点击它时,它现在给了我一个 404 错误。

【问题讨论】:

  • 通过启用 Web API、MVC 和身份验证(个人用户帐户)使用 Visuat Studio 创建一个 Web 应用程序为您提供了一个基本上包含所有内容的项目,这是一个很好的起点。 Web 上有很多关于 Web API 和 Web API 安全性的教程。除了您的问题太宽泛而无法回答之外,您还需要关注对您不起作用的问题。
  • 所以我遇到的问题是我使用个人用户帐户创建了一个新的 Web API,它已经完成了所有设置,但我很难理解如何制作一个简单的登录页面来传达该 api 的用户名/密码。我发现的教程似乎有助于面向 Web 的应用程序或 api 的身份验证,但不一定有助于两者之间的联系。对我来说,只是我需要更好地理解这些概念,这就是为什么我把它说得含糊不清,我不知道该问什么正确的问题。
  • Stack Overflow 并不是真的要提供教程(也不是教程链接)。它实际上更多的是关于代码的帮助。如果您已经走得足够远,可以共享代码,那可能是最好的方法。
  • 更新为根据@infiniteRefactor 建议的示例为更具体的问题添加代码

标签: asp.net asp.net-mvc rest asp.net-web-api asp.net-identity


【解决方案1】:

WebAPI 上的身份验证基于基于令牌的 OAuth 身份验证。

有一个身份验证 URL(默认创建项目的 /Token),当您使用用户名和密码向该 URL 发出 POST 请求时,您会得到一个令牌作为响应。您的客户端应用程序应存储此令牌并将其附加到每个请求以获得授权。

在底层,这个令牌生成和令牌识别过程由附加到您的应用程序管道的 OWin 组件提供。这些组件的初始化可以学习StartUp.Auth.cs

您的登录表单没有什么特别之处。它只会将用户名和密码发布到身份验证 URL。

您在客户端存储令牌的方式可能因您的设计而异。存储令牌的最首选方法是使用 cookie 或 Javascript 中的特定令牌存储。

您可以查看this tutorial 获取示例并讨论基础知识。

【讨论】:

  • 所以我已经加载了该教程的示例应用程序,但它都在 1 个项目中,出于我的目的,我需要将 api 和 web 应用程序分开。所以我在解决方案中添加了一个新项目并复制了主控制器和索引视图,但它正在使用
  • 那么我该如何改变它以访问 api?
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 2011-09-21
  • 1970-01-01
  • 2016-02-09
  • 2018-12-25
  • 2017-04-07
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多