我继承了现有的应用程序。此应用程序使用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中,或者是否有可以使用的库。我需要弄清楚完成这项工作的最短路。
非常感谢你!
答案 0 :(得分:2)
我在一年前建立了一个WebAPI Token Authentication库,提供基于令牌的身份验证:
WebAPI Token Auth Bootstrap 是开箱即用的基于令牌的WebAPI应用程序用户身份验证,提供随时可用的“TokenAuthorize” 属性和'TokenAuthApiController'控制器。
其中的功能 - 基于令牌的用户身份验证用户属性 TokenAuthApiController(Id,用户名,角色,LastAccess)。
基于令牌的用户授权TokenAuthorizeAttribute with Access 级别 - 公共,用户,管理员或匿名。
内置功能Login(),Logoff(),Error(),Unauthorized() 回应各种超载。
现在我正在开发一个Node.js应用程序,我使用的是使用Node.js库的Json Web Tokens(JWT),它非常简单明了..毕竟它的Node.js;)
我看到在this article上解释了JWT的.NET实现,我建议你看一下。
答案 1 :(得分:0)
您可以使用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)
});