Как читать MVC OWIN AuthenticationProperties?

Я устанавливаю IsPersistent при подписке пользователя, как читать это значение?

var identity = await UserManager.CreateIdentityAsync(appUser, DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);

Ответы

Ответ 1

Вы можете попробовать это, я не тестировал его

IAuthenticationManager AuthenticationManager
{
  get { return HttpContext.GetOwinContext().Authentication; }
}

Ответ 2

AspNet.Identity предоставляет вам доступ к значению bool IsPersistent для сеанса. Самый прямой способ прочитать его значение - вызвать AuthenticateAsync():

@using Microsoft.AspNet.Identity;
var authenticateResult = await HttpContext.GetOwinContext()
                           .Authentication.AuthenticateAsync(
                               DefaultAuthenticationTypes.ApplicationCookie
                           );
var isPersistent = authenticateResult.Properties.IsPersistent; //// true or false

Обратите внимание, что вам нужно будет обернуть это в async метод, такой как:

@using System.Threading.Tasks;
public async Task<ActionResult> SomeMethodName(...) { //etc }

Ответ 3

Поскольку описания не много, я не уверен в контексте. В любом случае вы можете получить все AuthenticationProperties, которые были предоставлены с помощью входящего вызова, когда вы выполняете аутентификацию по текущему запросу. Код будет..

AuthenticateResult authenticateResult = await HttpContext.GetOwinContext().Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationProperties yourAuthenticationProperties = authenticateResult.Properties;

Ответ 4

Как @Nkosi сказал, что вы можете не извлекать информацию из OWIN, потому что она не хранится там, вам нужно получить куки файл и проанализировать информацию вручную, но для этого вам понадобится OWIN Middleware, например этот, чтобы вы могли манипулировать своим файлом cookie, как хотите.

Ответ 5

Вы можете объявить static property CookieAuthOptions если вы настроили CookieAuthOptions в ConfigureAuth или в любом другом AuthOption также должна быть реализована ISecureDataFormat<AuthenticationTicket> (например, OAuthBearerOptions.AccessTokenFormat). Этот содержит методы Protect и Unprotect.

Всякий раз, когда вам нужен доступ к AuthenticationProperties, вы должны иметь возможность получить контроль над контекстом Оуэна, чтобы получить ссылку на тикет, который реализует ваш правильный формат.

В качестве основного примера шагов,

Startup.cs => public static CookieAuthenticationOptions  CookieAuthOptions; 
Startup.cs => ConfigureAuth => CookieAuthOptions.CookieName = "xxx"; 
BaseController.cs => Startup.CookieAuthOptions.TicketDataFormat.Unprotect(Request.Cookies["xxx"].Value).Properties;

чтобы получить то, что вы хотите.

PS: Вы не упомянули, где это нужно, и я предположил, что это будет в контроллере.

Ответ 6

AuthenticateResult authenticateResult = await HttpContext.GetOwinContext(). Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationProperties yourAuthenticationProperties = authenticateResult.Properties;

Ответ 7

var authenticationInfo = await HttpContext.Authentication.GetAuthenticateInfoAsync(DefaultAuthenticationTypes.ApplicationCookie);
authenticationInfo.Properties ...

Я полагаю, DefaultAuthenticationTypes.ApplicationCookie содержит схему проверки подлинности cookie.

Ответ 8

Чтобы получить значение IsPersistent, вызовите AuthenticateAsync():

@using Microsoft.AspNet.Identity;

var authenticateResult = await HttpContext.GetOwinContext()
                               .Authentication.AuthenticateAsync(
                                   DefaultAuthenticationTypes.ApplicationCookie
                               );
var isPersistent = authenticateResult.Properties.IsPersistent; //// true or false