Вы движетесь в правильном направлении, то, что вы делаете, это своего рода использование OAuth для облегчения сопоставления ваших токенов и предоставления OWin возможности обрабатывать информацию браузера.Итак, используя атрибут [Authorize], как вы это делаете, как вы справляетесь с подписью удостоверения личности?Как упоминалось выше при проверке подлинности с помощью форм, вам все равно необходимо создать токен Identity / Claim.В моих проектах я делаю что-то вроде этого,
protected void IdentitySignin(IUserModel userModel, string providerKey = null, bool isPersistent = true)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, userModel.Id.ToString()),
new Claim(ClaimTypes.Name, userModel.UserName),
new Claim("UserContext", userModel.ToString())
};
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = isPersistent,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
}, identity);
}
Это вынуждает OWIN / OAuth войти в систему пользователя, и в моем web.config у меня есть следующее:
<system.webserver>
<authentication mode="None" />
</system.webserver>
Ичтобы выйти из моего пользователя и заставить браузер получить новый токен:
protected void IdentitySignout()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie,
DefaultAuthenticationTypes.ExternalCookie);
}
Мой AuthenticationManager определен так:
private IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
, который является частью Microsoft.OWin.IOwinContext, вам придется добавить ссылку, если она не существует.
Вы можете обработать неавторизованного пользователя через файл web.config или base-controller, я выбрал опцию base-controller следующим образом:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (UserContext == null || UserContext.Id.Equals(Guid.Empty))
{
if (filterContext.Controller.GetType() == typeof(AccountController) || filterContext.Controller.GetType() == typeof(HomeController)) return;
filterContext.Result = new RedirectResult("/Home/Index");
return;
}
}
Но вы также можете сделать это через AuthorizeAttribute, если хотите.Эта ссылка подробно расскажет о работе с Oauth и Asp.Net MVC, поначалу может показаться сложной, но она дает отличную схему использования других провайдеров, если вы решили включить их в выпускную версию.
https://www.codeproject.com/Articles/577384/Introduction-to-OAuth-in-ASP-NET-MVC