アイデンティティの概念全体は初めてですが、Google で 2 回検索しましたが、適切だと感じた回答が見つかりませんでした。
EF Core と IdentityServer 4 (ID4) で .NET Core 1.0.0 を使用しています。ID4 は別のサーバー上にあり、クライアントで取得できる唯一の情報はクレームです。できれば User.Identity から、完全な (拡張された) ユーザー プロファイルにアクセスしたいと思います。
では、毎回 DB リクエストを送信せずに User.Identity に ApplicationUser モデルのすべてのプロパティが設定されるように設定するにはどうすればよいでしょうか? セッションが終了するまで、認証時に情報をキャッシュに保存したいと思います。
私がやりたくないのは、各コントローラーでクエリを設定して追加情報を取得することです。クライアント上のすべてのコントローラはベース コントローラから継承されます。つまり、必要に応じて何らかのサービスを DI できます。
前もって感謝します。
クライアント
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies"
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies",
Authority = Configuration.GetSection("IdentityServer").GetValue<string>("Authority"),
RequireHttpsMetadata = false,
ClientId = "RateAdminApp"
});
ID4
app.UseIdentity();
app.UseIdentityServer();
services.AddDeveloperIdentityServer()
.AddOperationalStore(builder => builder.UseSqlServer("Server=localhost;Database=Identities;MultipleActiveResultSets=true;Integrated Security=true", options => options.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name)))
.AddConfigurationStore(builder => builder.UseSqlServer("Server=localhost;Database=Identities;MultipleActiveResultSets=true;Integrated Security=true", options => options.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name)))
.AddAspNetIdentity<ApplicationUser>();
ApplicationUser モデル
public class ApplicationUser : IdentityUser
{
[Column(TypeName = "varchar(100)")]
public string FirstName { get; set; }
[Column(TypeName = "varchar(100)")]
public string LastName { get; set; }
[Column(TypeName = "nvarchar(max)")]
public string ProfilePictureBase64 { get; set; }
}