Ответ 1
Вы можете попробовать это, я не тестировал его
IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
Я устанавливаю IsPersistent при подписке пользователя, как читать это значение?
var identity = await UserManager.CreateIdentityAsync(appUser, DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);
Вы можете попробовать это, я не тестировал его
IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
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 }
Поскольку описания не много, я не уверен в контексте. В любом случае вы можете получить все AuthenticationProperties
, которые были предоставлены с помощью входящего вызова, когда вы выполняете аутентификацию по текущему запросу. Код будет..
AuthenticateResult authenticateResult = await HttpContext.GetOwinContext().Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationProperties yourAuthenticationProperties = authenticateResult.Properties;
Как @Nkosi сказал, что вы можете не извлекать информацию из OWIN, потому что она не хранится там, вам нужно получить куки файл и проанализировать информацию вручную, но для этого вам понадобится OWIN Middleware, например этот, чтобы вы могли манипулировать своим файлом cookie, как хотите.
Вы можете объявить 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: Вы не упомянули, где это нужно, и я предположил, что это будет в контроллере.
AuthenticateResult authenticateResult = await HttpContext.GetOwinContext(). Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationProperties yourAuthenticationProperties = authenticateResult.Properties;
var authenticationInfo = await HttpContext.Authentication.GetAuthenticateInfoAsync(DefaultAuthenticationTypes.ApplicationCookie);
authenticationInfo.Properties ...
Я полагаю, DefaultAuthenticationTypes.ApplicationCookie содержит схему проверки подлинности cookie.
Чтобы получить значение IsPersistent
, вызовите AuthenticateAsync()
:
@using Microsoft.AspNet.Identity;
var authenticateResult = await HttpContext.GetOwinContext()
.Authentication.AuthenticateAsync(
DefaultAuthenticationTypes.ApplicationCookie
);
var isPersistent = authenticateResult.Properties.IsPersistent; //// true or false