хорошо - так что я пытаюсь сделать что-то вроде vimeo.com
, где можно получить доступ к частному видео, просто введя пароль
, например, если вы go здесь:
https://vimeo.com/392083444
вы получаете простое поле для ввода пароля и кнопку отправки
я пришел к выводу, что использовать претензии
, поскольку пользователь является анонимным - я не хотел использовать Identity
в Кроме того, видео-пароль сохраняется в БД с метаданными видео
ох и кстати, точно так же, как vimeo или youtube -
существует правильная настройка идентификатора b c профиль управляется надлежащим логином идентификации
Итак, первый вопрос:
делает с ClaimsPrinciple лучшую стратегию для этого?
или я слишком много делаю из этого?
я имею в виду pre-Core, который у меня был бы ушел с сессионными переменными, но в ядре сейчас ничего нет
вот что я получил до сих пор
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LinkLogin([Bind("ID, Guid, Password")] LinkLoginVM vm)
{
if (String.IsNullOrEmpty(vm.Password))
{
return ViewComponent("Error", new { errorcode = 1});
}
var c = await db.Vids.SingleAsync(c => c.Guid == vm.Guid);
// create and add guid
if (ModelState.IsValid)
{
if (vm.Password == c.Password)
{
// give user a claim
ApplicationUser user = await um.GetUserAsync(HttpContext.User); <-- this doesnt really return anything
var claims = new List<Claim>() {
new Claim(ClaimTypes.Name, "Password Guest"),
new Claim(JwtRegisteredClaimNames.Sub, vm.Guid),
new Claim(JwtRegisteredClaimNames.AuthTime, DateTime.Now.ToString())
};
// not sure what im doing here
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
// await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProps);
await HttpContext.SignInAsync(new ClaimsPrincipal(claimsIdentity), authProps);
}
}
else
{
// put debugger here if problematic
Console.WriteLine("ERR: ModelState not valid");
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
}
return RedirectToAction("Vids", new { id = vm.Guid });
}
в моем стартапе, я уверен, что что-то испортил -
потому что я чувствую, что все я читаю кучу спагетти трески e в статьях
и с постоянными изменениями версии даже некоторые статьи за год go устарели
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = "/View/LinkLogin/";
options.LogoutPath = "/Account/Logout/";
//options.Cookie.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = environment.IsDevelopment() ? Microsoft.AspNetCore.Http.CookieSecurePolicy.None : Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict;
});
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(35);
//could be -
//options.LoginPath = "/Identity/Account/Login";
//options.LogoutPath = "/Identity/Account/Logout";
//options.AccessDeniedPath = "/Identity/Account/AccessDenied";
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
options.SlidingExpiration = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddRazorPagesOptions(options =>
{
// deprecated in3.1?
// options.AllowAreas = true;
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
options.Conventions.AuthorizeFolder("/View");
});
, а затем позже:
// routing and security
app.UseRouting();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
я ссылаюсь на эти статьи:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-3.1
https://www.yogihosting.com/aspnet-core-identity-claims/
https://www.red-gate.com/simple-talk/dotnet/net-development/using-auth-cookies-in-asp-net-core/
претензии получить обработано, но они не сохраняются
возможно ли хранить эти заявки анонимным пользователем
, если да, где мне их искать с анонимным пользователем?
если нет, что мне делать дальше?