Identityコンセプト全体に新しく追加されましたが、私はいくつかのGoogle検索を行いましたが、外部認証を使用してユーザープロファイルをキャッシュする.NET Core IdentityServer4
私は.NET Core 1.0.0とEF CoreとIdentityServer 4(ID4)を使用しています。ID4は別のサーバーにあり、クライアントで取得する唯一の情報はクレームです。私はUser.Identityから、(拡張された)完全なユーザープロフィールにアクセスしたいと思っています。
これで、毎回DBリクエストを送信せずに、User.IdentityにApplicationUserモデルのすべてのプロパティが設定されるように設定する方法はありますか。セッションが終了するまで、認証時に情報をキャッシュに保存したい。
私がしたくないことは、各コントローラで追加情報を取得するためのクエリを設定することです。クライアント上のすべてのコントローラは、ベースコントローラから継承されます。つまり、DIが必要な場合は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; }
}
ユーザープロファイルに追加したいプロパティを追加する必要がありますか?例えば。 ApplicationUserモデルでFirstNameを使用しても実際には値は提供されません。 – Max
IDサーバーにクレームを追加したいですか?私の更新を参照してください。 –
間違いなく私は後になっているものに近づいているように見えます!プロパティの複製に関する私の唯一の懸念は、ユーザーの主張とAspNetUsersプロパティの両方を同期させる必要があることを確認する必要があることです。 しかし、代わりにOnSigningInを使ってcontext.Principal.Identityにすべてのプロパティを選択するだけで、クレームやAspNetUsersのプロパティが同期しなくなるのを避けることができますか? @ adem-caglin – Max