我正在测试 Duende Identity Server。
我使用名为 6_JS_with_backend 的示例来测试 Google IDP。初始样本工作正常。
我修改了它,用数据库替换了内存数据(使用身份框架),然后声明缺少个人资料信息(姓名、名字、姓氏)。一旦我切换回“记忆中”,它就又恢复正常了。 EF迁移已经成功创建数据库,没有执行错误。
我不明白发生了什么事。
Javascript 客户端未修改。
IdentityServer 配置服务:
public static WebApplication ConfigureServices(this WebApplicationBuilder builder)
{
var migrationsAssembly = typeof(Program).Assembly.GetName().Name;
builder.Services.AddRazorPages();
string connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));
builder.Services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddIdentityServer(options =>
{
options.EmitStaticAudienceClaim = true;
})
.AddConfigurationStoreCache()
.AddConfigurationStore(options =>
{
options.EnablePooling = true;
options.ConfigureDbContext = builder =>
{
builder.UseSqlServer(connectionString, configure =>
{
configure.MigrationsAssembly(migrationsAssembly);
});
};
})
.AddOperationalStore(options =>
{
options.EnablePooling = true;
options.ConfigureDbContext = builder =>
{
builder.UseSqlServer(connectionString, configure =>
{
configure.MigrationsAssembly(migrationsAssembly);
});
};
options.EnableTokenCleanup = true;
options.TokenCleanupInterval = (int)TimeSpan.FromDays(20).TotalSeconds;
});
builder.Services.AddIdentityServerConfiguration(opt => opt.LicenseKey = "<TEST>").AddClientConfigurationStore();
builder.Services.AddConfigurationDbContext<ConfigurationDbContext>(options =>
{
options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString);
});
var configuration = builder.Configuration;
// Put in Keyvault
builder.Services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = configuration["Authentication:Google:ClientId"]!;
options.ClientSecret = configuration["Authentication:Google:ClientSecret"]!;
});
return builder.Build();
}
应用角色:
using Microsoft.AspNetCore.Identity;
namespace IdentityServer.Models
{
public class ApplicationRole : IdentityRole
{
}
}
应用程序用户
using Microsoft.AspNetCore.Identity;
namespace IdentityServer.Models
{
public class ApplicationUser : IdentityUser
{
public string? TenantId { get; set; }
public string? License { get; set; }
}
}
我检查了数据库。 客户端在这里,还有客户端范围和身份资源。
我发现 Duende.IdentityServer.EntityFramework.Entities.IdentityResource 中没有名为配置文件的用户声明。名为 IdentityResourceClaims 的表为空。我没有找到任何关于此的文档,并且提供该表的代码示例未填充该表。 我填写了 IdentityResourceClaims,它解决了问题。