#asp.net-mvc #identityserver4
#asp.net-mvc #identityserver4
Вопрос:
Я использую IdentityServer4 для настройки службы аутентификации для моего веб-приложения. Я уже настраиваю IdentityServer с помощью in MemoryStorage. Проблема, о которой я спрашивал себя, заключается в том, получил ли я токен от IdentityServer, а позже IdentityServer перезапускается, когда срок действия токена истек, identitySever может распознать токен и обновить его?
Если ответ второй, можете ли вы дать мне несколько идей о том, как это реализовать?
Ответ №1:
Вам нужно будет реализовать свой собственный IRefreshTokenStore и добавить его в свой DI-контейнер, например:
// Add to DI
services.AddSingleton<IRefreshTokenStore , CustomRefreshTokenStore >();
// Create a new class that implements the IRefreshTokenStore
public class CustomRefreshTokenStore : IRefreshTokenStore
{
public Task<RefreshToken> GetRefreshTokenAsync(string refreshTokenHandle)
{
throw new NotImplementedException();
}
public Task RemoveRefreshTokenAsync(string refreshTokenHandle)
{
throw new NotImplementedException();
}
public Task RemoveRefreshTokensAsync(string subjectId, string clientId)
{
throw new NotImplementedException();
}
public Task<string> StoreRefreshTokenAsync(RefreshToken refreshToken)
{
throw new NotImplementedException();
}
public Task UpdateRefreshTokenAsync(string handle, RefreshToken refreshToken)
{
throw new NotImplementedException();
}
}
Комментарии:
1. Есть какой-нибудь пример реализации?
Ответ №2:
Интерфейс IIdentityServerBuilder имеет расширение, называемое AddOperationalStore.
Настройка и миграция базы данных описаны здесь:http://docs.identityserver.io/en/latest/quickstarts/7_entity_framework.html
Вы можете использовать его как:
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
var isrvBuilder = services.AddIdentityServer();
isrvBuilder.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"),
sql => sql.MigrationsAssembly(migrationsAssembly));
options.EnableTokenCleanup = true;
options.TokenCleanupInterval = 30;
});