public async Task <SsoResponse> Login([FromBody] LoginPost data) { try { Identity.AccessToken = new AccessToken(data.Token); Identity.ServerIdentifier = _serverIdentifier; if (!Identity.IsAuthenticated) { Identity.AccessTier = await _plexClient.GetAccessTier(_serverIdentifier, Identity.AccessToken); } if (Identity.AccessTier == AccessTier.Failure) { Identity.AccessTier = AccessTier.NoAccess; Identity.IsAuthenticated = false; return(GetErrorResponse()); } var user = await _plexClient.GetUserInfo(Identity.AccessToken); Identity.Email = user.Email; Identity.Username = user.Username; Identity.Thumbnail = user.Thumbnail; Identity.IsAuthenticated = true; var identity = new ClaimsIdentity( Identity.AsClaims(), CookieAuthenticationDefaults.AuthenticationScheme ); var authProperties = new AuthenticationProperties { AllowRefresh = true, IsPersistent = true }; await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), authProperties ); var response = _authValidator.ValidateAuthenticationStatus(Identity, ServiceName, ServiceUri); Response.StatusCode = response.Status; return(response); } catch (Exception e) { _logger.LogError("Failed to log user in", e); Identity.AccessTier = AccessTier.NoAccess; Identity.IsAuthenticated = false; return(GetErrorResponse()); } }