web-dev-qa-db-ja.com

ASP.NET OneCoreでクレーム値を更新する

MVC 6(Asp.Net One Core)にWebアプリケーションがあり、クレームベースの認証を使用しています。 Loginメソッドで、クレームを設定します。

var claims = new Claim[]
{
    new Claim("Name", content.Name),
    new Claim("Email", content.Email),
    new Claim("RoleId", content.RoleId.ToString()),
};

var ci = new ClaimsIdentity(claims, "password");
await HttpContext.Authentication.SignInAsync("Cookies", new ClaimsPrincipal(ci));

たとえば、ユーザーがユーザープロファイルの電子メールを変更した場合、「電子メール」クレームの電子メール値を変更するにはどうすればよいですか? Cookieを更新するには、SignOutAsyncとSignInAsyncを再度実行する必要がありますか?最善の解決策は、これをクラシックセッションに保存することですか?より良い解決策はありますか?私は完全に間違っていますか?

助言がありますか?

9
Martín

Cookieを更新するには、SignOutAsyncとSignInAsyncを再度実行する必要がありますか?

答えはイエスです。

最も簡単な方法は、手動でサインアウトおよびサインインできることです(クレームを再度作成)電子メールを更新しているのと同じアクションメソッド内で。

最善の解決策は、これをクラシックセッションに保存することですか?

そうしないことをお勧めします。セッション状態を明示的に使用することは、ASP.NetMVCでは悪い習慣です。

4
Win

SignOutAsyncSignInAsyncの代わりに、RefreshSignInAsyncを使用することもできます。

例:

var user = await _userManager.FindByIdAsync(yourId);
await _signInManager.RefreshSignInAsync(user);

RefreshSignInAsyncSignInManagerコードを表示します: https://github.com/aspnet/AspNetCore/blob/79beaea734016e86e83d0a249ab8b4c8bdf2046d/src/Identity/Core/src/SignInManager.cs

25
ozziwald