「アイデンティティ」生成クッキー内に何かを保存したいと思います。私は現在、ドキュメントからデフォルトのアイデンティティ設定を使用しています。ASP.NETコアIDを持つクッキーにトークンを保存
Startup.cs
services.Configure<IdentityOptions>(options =>
{
// User settings
options.User.RequireUniqueEmail = true;
// Cookie settings
options.Cookies.ApplicationCookie.AuthenticationScheme = "Cookies";
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
options.Cookies.ApplicationCookie.SlidingExpiration = true;
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
options.Cookies.ApplicationCookie.LoginPath = "/Account";
options.Cookies.ApplicationCookie.LogoutPath = "/Account/Logout";
});
AccountController.cs
var result = await _signInManager.PasswordSignInAsync(user.UserName, model.Password, true, true);
if (result.Succeeded)
{
_logger.LogInformation(1, "User logged in.");
var tokens = new List<AuthenticationToken>
{
new AuthenticationToken {Name = "Test", Value = "Test"},
};
var info = await HttpContext.Authentication.GetAuthenticateInfoAsync("Cookies");
info.Properties.StoreTokens(tokens);
動作しないようです。クッキーはまだ作成されていないためです。 'Info'変数は空です。
私が使用して、それを解決できる 'CookieMiddleware'
Startup.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies",
ExpireTimeSpan = TimeSpan.FromHours(1),
SlidingExpiration = true,
AutomaticAuthenticate = true,
LoginPath = "/Account",
LogoutPath = "/Account/Logout",
});
しかし、私はこの場合
await HttpContext.Authentication.SignInAsync("Cookies", <userPrincipal>);
を私は自分自身構築する必要があります使用する必要があるよりも、 'ユーザープリンシパル'。そして、私はこの問題に対して「アイデンティティ」を活用することを好む。
これを組み合わせることは可能ですか? これが当てはまらない場合は、どのようにすれば良い方法でclaimsprincipalを生成できますか?
すべてのクレームを「マップ」する必要はありません。だから、
List<Claim> userClaims = new List<Claim>
{
new Claim("UserId", Convert.ToString(user.Id)),
new Claim(ClaimTypes.Name, user.UserName),
// TODO: Foreach over roles
};
ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
await HttpContext.Authentication.SignInAsync("Cookies", principal);
のようなもの:
ClaimsPrincipal pricipal = new ClaimsPrincipal(user.Claims);
user.ClaimsはタイプIdentityUserClaimのとないタイプSecurity.Claims.Claimであるので、これは動作しません。
読んでいただきありがとうございます。 は良い一日、
は誠意をこめて、ブレヒト