【问题标题】:Authenticating a .NET MVC application with a Web Api使用 Web Api 对 .NET MVC 应用程序进行身份验证
【发布时间】:2014-04-26 08:10:18
【问题描述】:

我有一个基于 SPA VS 2013 模板的 Web Api 2 项目。我在该 API 中配置了不记名令牌身份验证。

我还有一个单独的 MVC 5 项目,我想使用该 Web Api 进行身份验证。那可能吗?怎么样?

到目前为止我做了什么(在我的 Mvc 客户端中):

using (var client = new HttpClient())
{
      client.BaseAddress = new Uri("http://localhost/MyApi/");

      var response = client.PostAsync("Token", new StringContent("grant_type=password&username=teste&password=123456", Encoding.UTF8)).Result;

      if (response.IsSuccessStatusCode)
      {
           //
      }
}

它得到了令牌,但现在呢?

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api owin


    【解决方案1】:

    如果你得到了令牌,你应该已经准备好了。您只需要在每个请求的标头中提供它,例如:

    Authorization: Bearer boQtj0SCGz2GFGz[...]
    

    编辑:

    使用 HttpClient 你会做这样的事情:

    var requestMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost/MyApi/");
    requestMessage.Headers.Add("Authorization", "Bearer boQtj0SCGz2GFGz[...]");
    

    【讨论】:

    • 如何在标头中设置该标记?无论如何要自动执行此操作?
    • MVC 和 Web API 必须是分开的应用程序吗?如果您可以将它们保存在同一台服务器上,您就不必执行任何 HTTP 请求来从 MVC 客户端进行身份验证。
    • 它是同一台服务器,但不同的项目:-MyProjectApi,-MyProjectMvc
    • 在其他客户端使用相同的 API
    • 首先使用 UserManager 的 CreateIdentity 方法创建身份。然后使用 AuthenticationManager 的 SignIn 方法登录用户。就这样。您无需担心访问令牌,框架会为您处理。示例: var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookies); AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, 身份);
    【解决方案2】:

    我怀疑您使用的是资源所有者流 (uid/pwd) 的 SPA。如果你现在有一个新的客户端,它是一个单独的 MVC 项目,它会被认为是一个代码流客户端,所以这意味着你需要在你的 OAuth2 授权服务器中支持代码流。不幸的是,来自 Microsoft 的 Katana OAuth2 授权服务器中间件并没有真正设计为支持更复杂的 OAuth2 场景,因此您可能不得不考虑使用单独的专用 OAuth2 授权服务器。 Thinktecture AuthorizationServer 是 .NET 中的免费开源实现,您可能会使用它:

    http://thinktecture.github.io/Thinktecture.AuthorizationServer/

    否则,您几乎是在从头开始实施 OAuth2 授权服务器。

    【讨论】:

    • 我用我做的一些代码编辑了我的问题...你能评论一下吗?
    【解决方案3】:

    您可以在 asp.net web api 中大胆地使用和配置 ASP.NET Identity 和 OWIN 组件来提供身份验证服务。

    ASP.NET Identity 可用于所有 ASP.NET 框架,例如 ASP.NET MVC、Web 窗体、网页、Web API 和 SignalR。

    有关它的更多信息,请查看此链接

    http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

    希望有帮助。

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 2021-12-23
      • 2018-03-19
      • 2017-10-29
      • 2017-03-15
      • 2020-11-16
      • 2018-08-09
      • 2018-08-30
      • 2013-12-09
      相关资源
      最近更新 更多