具有 .net Core Identity 的 IdentityServer 4:尽管使用了数据保护,但在 Azure



我已经设置了一个IdentityServer 4 API,在其中我使用.Net Core Identity来管理用户。作为此设置的一部分,我使用 JWT 令牌来控制对 API 的访问,并结合刷新令牌来在需要时续订 JWT。

在我执行代码更新并在 Azure 应用服务上重新发布之前,一切都像一个超级按钮。从那时起,刷新令牌不再起作用,所有用户都必须重新登录,这是一个真正的痛苦。我在网上到处寻找,但找不到解决方案。我确实使用数据保护将密钥保留在 blob 存储中,但这似乎没有任何作用。

任何人都可以帮助我,因为我陷入了避免进行任何代码更新的情况,这样我的用户就不会感到沮丧。提前谢谢。

这是我在启动中的配置服务.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
// Default Password settings.
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 1;
options.Password.RequiredUniqueChars = 1;
// Default User settings.
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; //must be email characters if taken as username
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>();
var builder = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
options.PublicOrigin = Configuration["Domains:PublicOrigin"];
options.IssuerUri = Configuration["Domains:Authority"];
})
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApis())
.AddInMemoryClients(Config.GetClients(Configuration))
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<MyProfileService>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(isAuth =>
{
isAuth.RequireHttpsMetadata = false;
isAuth.Authority = Configuration["Domains:Authority"];
isAuth.ApiName = "identity_api";
});
X509Certificate2 certificate = CertificateHelper.GetCertificate(Configuration, Environment);
var connectionString = Configuration["CloudStorageAccount:ConnectionString"];
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("tokens");
container.CreateIfNotExistsAsync().GetAwaiter().GetResult();
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(container, Configuration["KeyVault:AzureBlobKeysFileIfNotKubernetes"])
.ProtectKeysWithCertificate(certificate)
.SetApplicationName("AppIdentity");
builder.AddSigningCredential(certificate);
services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1);
}

您需要为身份服务器添加操作存储的配置。

builder.AddOperationalStore(options => 
options.ConfigureDbContext = storeBuilder => storeBuilder.UseSqlServer(connectionString);
);

如果没有此标识服务器,则不知道将刷新令牌存储在何处,以便在应用程序重新启动后可以使用它们。

有关详细信息,请查看持久授权的运营商店支持。

相关内容

  • 没有找到相关文章

最新更新