Cookieauthentication продолжает воссоздать билет на печенье и аутентификациюC#

Место общения программистов C#
Ответить
Anonymous
 Cookieauthentication продолжает воссоздать билет на печенье и аутентификацию

Сообщение Anonymous »

У меня есть приложение Blazor Server, которое использует файлы cookie в качестве схемы по умолчанию и OpenIdConnect в качестве схемы задач. В приложении также используется распределенный кэш SQL Server для реализации IticketStore . Токен доступа имеет срок службы 48 часов, а токен обновления 30 дней.services.AddOptions(CookieAuthenticationDefaults.AuthenticationScheme)
.Configure((options, store) =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(14);
options.SlidingExpiration = true;
options.SessionStore = store;
});
< /code>
и аутентификация: < /p>
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = authority;
options.ClientId = clientId;
options.ClientSecret = clientSecret;
options.ResponseType = OpenIdConnectResponseType.Code;
options.ResponseMode = OpenIdConnectResponseMode.FormPost;
options.GetClaimsFromUserInfoEndpoint = true;
options.MapInboundClaims = false;
options.SaveTokens = true;
options.UseTokenLifetime = false;
options.UseSecurityTokenValidator = true;
options.Scope.Add(OpenIdConnectScope.OpenIdProfile);
options.Scope.Add(OpenIdConnectScope.Email);
options.Scope.Add(OpenIdConnectScope.OfflineAccess);
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
< /code>
Войдите в систему: < /p>
public async Task OnGet(string redirectUri)
{
await HttpContext.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
{
RedirectUri = redirectUri,
IsPersistent = true,
});
}

Каждый раз, когда пользователь обращается к приложению, в кэше добавляется новый элемент, а в кэше добавляется новый элемент. /> iticketstore < /code> реализация: < /p>
public class AuthenticationTicketStore(
IDistributedCache cache,
ILogger logger) : ITicketStore
{
private const string KeyPrefix = "AuthSessionStore-";
private readonly TicketSerializer ticketSerializer = TicketSerializer.Default;

public async Task StoreAsync(AuthenticationTicket ticket)
{
var key = $"{KeyPrefix}{Guid.NewGuid():N}";
await RenewAsync(key, ticket);

return key;
}

public Task RenewAsync(string key, AuthenticationTicket ticket)
{
if (ticket == null)
{
throw new ArgumentNullException(nameof(ticket));
}

var options = new DistributedCacheEntryOptions();

var expiresUtc = ticket.Properties.ExpiresUtc;
if (expiresUtc.HasValue)
{
options.SetAbsoluteExpiration(expiresUtc.Value);
}

if (ticket.Properties.AllowRefresh ?? false)
{
options.SetSlidingExpiration(TimeSpan.FromMinutes(60));
}

return cache.SetAsync(key, ticketSerializer.Serialize(ticket), options);
}

public async Task RetrieveAsync(string key)
{
var value = await cache.GetAsync(key);
return value != null ? ticketSerializer.Deserialize(value) : null;
}

public Task RemoveAsync(string key) => cache.RemoveAsync(key);
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... ion-ticket
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»