【问题标题】:Token-based Authorization in Existing ASP.NET MVC App现有 ASP.NET MVC 应用程序中基于令牌的授权
【发布时间】:2014-07-18 11:26:24
【问题描述】:

我继承了现有的应用程序。此应用程序使用 ASP.NET MVC 3。它有一些 API。这些 API 如下所示:

[AcceptVerbs(HttpVerbs.Post)]
[Endpoint]
public ActionResult AuthenticatePlayer(string username, string password)
{
  // Ensure that the user entered valid credentials
  if (Membership.ValidateUser(username, password) == false)
    return Json(new { statusCode = StatusCodes.INVALID_CREDENTIALS, message = "You entered an invalid username or password. Please try again." });


  // Get the profile of the person that just logged in.
  ProfileCommon userProfile = (ProfileCommon)(ProfileCommon.Create(username));
  if (userProfile != null)
  {
    string name = username;
    if (String.IsNullOrEmpty(userProfile.FirstName) == false)
      name = userProfile.FirstName;


    return Json(new {
      statusCode = StatusCodes.SUCCESS,
      payload = name,
      username = username.ToLower(),
    });
  }
}

[AcceptVerbs(HttpVerbs.Get)]
[Endpoint]
public ActionResult SomeUserAction(string q)
{
  // TODO: Ensure the user is authorized to perform this action via a token

  // Do something
  return Json(new { original = q, response = DateTime.UtcNow.Millisecond }, JsonRequestBehavior.AllowGet);
}

我试图弄清楚如何将基于令牌的授权模式集成到此过程中。据我了解,如果用户成功登录,基于令牌的系统将向用户返回一个短期令牌和一个刷新令牌。然后,每个方法都可以通过查看令牌来检查用户是否被授权执行操作。我正在尝试了解这是否是 ASP.NET MVC 内置的,或者是否有我可以使用的库。我需要找出完成这项工作的最短方法。

非常感谢!

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 asp.net-web-api


    【解决方案1】:

    我在一年前建立了一个WebAPI Token Authentication 库,提供基于令牌的身份验证:

    WebAPI Token Auth Bootstrap 是开箱即用的基于令牌的 WebAPI 应用程序用户身份验证,提供随时可用的“TokenAuthorize” 属性和 'TokenAuthApiController' 控制器。

    在其功能中 - 基于令牌的用户身份验证用户属性内 TokenAuthApiController(Id、用户名、角色、LastAccess)。

    具有访问权限的基于令牌的用户授权 TokenAuthorizeAttribute 级别 - 公开、用户、管理员或匿名。

    内置功能 Login(), Logoff(), Error(), Unauthorized() 各种重载的响应。

    您可以在 GitHub 中阅读有关 here 及其自己的 wiki 的更多信息。

    现在我正在开发一个 Node.js 应用程序,我正在使用使用 Node.js 库的 Json Web 令牌 (JWT),它非常简单明了.. 毕竟它的 Node.js ;)

    我看到this article 上解释了 JWT 的 .NET 实现,我建议您查看。

    【讨论】:

    • 抱歉问了一个关于基于令牌的身份验证的问题。我已经看到人们为 web api 项目选择基于令牌的身份验证,但当他们使用 MVC 开发任何网站时几乎不采用这种方法。所以你能告诉我为什么基于令牌的身份验证是 web api 的正确解决方案,因为人们也可以在 web api 中使用表单身份验证。谢谢
    【解决方案2】:

    您可以使用 Owin ...即 Microsoft.owin.security

    我没有尝试过这个实现,但这只是给你一个想法:

    var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
    var currentUtc = new SystemClock().UtcNow;
    ticket.Properties.IssuedUtc = currentUtc;
    ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
    DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
    
    return Json(new {
        statusCode = StatusCodes.SUCCESS,
        payload = name,
        username = username.ToLower(),
        accessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
    });
    

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 2019-08-02
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2016-11-18
      • 2015-10-05
      相关资源
      最近更新 更多