Test Autentification 20230216

master
084MochalinPA 2 years ago
parent 9b7289569a
commit 29381c25fa

@ -0,0 +1,30 @@
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Security.Claims;
namespace TestApp02.Data
{
public class BiudAuthService
{
public BiudAuthService() {
Users = new Dictionary<string, ClaimsPrincipal> ();
}
public Dictionary<string, ClaimsPrincipal> Users { get; set; }
public ClaimsPrincipal AuthenticateUser(string p_LoginUser, string p_PasswordUser)
{
//ClaimsIdentity _ClaimsIdentity = new ClaimsIdentity();
List<Claim> _Claims = new List<Claim>{
new Claim(ClaimTypes.Name, p_LoginUser),
new Claim("Surname", "Surname"),
new Claim ("Firstname", "Firstname"),
new Claim ("Middlename", "Middlename"),
new Claim ("Raion", "raion")
};
ClaimsIdentity _ClaimsIdentity = new ClaimsIdentity(_Claims, CookieAuthenticationDefaults.AuthenticationScheme);
ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(_ClaimsIdentity);
return claimsPrincipal;
}
}
}

@ -0,0 +1,6 @@
@page
@model BlazorCookieAuth.Server.Pages.LoginModel
@{
ViewData["Title"] = "Log in";
}
<h2>Login</h2>

@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using TestApp02.Data;
namespace BlazorCookieAuth.Server.Pages
{
[AllowAnonymous]
public class LoginModel : PageModel
{
public string ReturnUrl { get; set; }
private readonly BiudAuthService _biudAuthService;
public LoginModel(BiudAuthService pbiudAuthService)
{
_biudAuthService= pbiudAuthService;
}
public async Task<IActionResult> OnGetAsync(string paramUsername, string paramPassword)
{
string returnUrl = Url.Content("~/");
if (ModelState.IsValid)
{
ClaimsPrincipal claimsPrincipal = _biudAuthService.AuthenticateUser(paramUsername, paramPassword);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
}
//try
//{
// // Clear the existing external cookie
// await HttpContext
// .SignOutAsync(
// CookieAuthenticationDefaults.AuthenticationScheme);
//}
//catch { }
//// *** !!! This is where you would validate the user !!! ***
//// In this example we just log the user in
//// (Always log the user in for this demo)
//var claims = new List<Claim>
//{
// new Claim(ClaimTypes.Name, paramUsername),
// new Claim(ClaimTypes.Role, "Administrator"),
//};
//var claimsIdentity = new ClaimsIdentity(
// claims, CookieAuthenticationDefaults.AuthenticationScheme);
//var authProperties = new AuthenticationProperties
//{
// IsPersistent = true,
// RedirectUri = this.Request.Host.Value
//};
//try
//{
// await HttpContext.SignInAsync(
// CookieAuthenticationDefaults.AuthenticationScheme,
// new ClaimsPrincipal(claimsIdentity),
// authProperties);
//}
//catch (Exception ex)
//{
// string error = ex.Message;
//}
return LocalRedirect(returnUrl);
}
}
}

@ -0,0 +1,31 @@
@page "/loginr"
@inherits LoginModel;
@using System.ComponentModel.DataAnnotations
@using System.Web;
<EditForm Model="@loginAccountForm" OnValidSubmit="OnPostAsync">
<DataAnnotationsValidator />
<MudGrid>
<MudItem xs="12" sm="7">
<MudCard>
@*<DataAnnotationsValidator/>*@
<ValidationSummary/>
<MudCardContent>
<MudTextField Label="Логин" HelperText="Введите логин"
@bind-Value="loginAccountForm.Username" For="@(() => loginAccountForm.Username)" />
<MudTextField Label="Пароль" HelperText="Введите пароль" Class="mt-3"
@bind-Value="loginAccountForm.Password" For="@(() => loginAccountForm.Password)" InputType="InputType.Password" />
</MudCardContent>
<MudCardActions>
<MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary" Class="ml-auto">Зарегистрироваться</MudButton>
</MudCardActions>
</MudCard>
</MudItem>
</MudGrid>
</EditForm>
@code {
}

@ -0,0 +1,64 @@
using Microsoft.AspNetCore.Components;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using TestApp02.Data;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Web;
namespace TestApp02.Pages
{
public class LoginModel: ComponentBase
{
[Inject] NavigationManager _navigationManager { get; set; }
//private BiudAuthService _BiudAuthService;
[Inject] BiudAuthService _BiudAuthService { get; set; }
//public LoginModel(BiudAuthService pBiudAuthService)
public LoginModel()
{
loginAccountForm= new LoginAccountForm();
}
public LoginAccountForm loginAccountForm { get; set;}
protected async Task OnPostAsync()
{
//ClaimsPrincipal principal;
//principal = _BiudAuthService.AuthenticateUser(loginAccountForm.Username, loginAccountForm.Password);
//if (principal == null) {
// //await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
//};
//var identity = principal.Identity as ClaimsIdentity;
string _uName = encode(loginAccountForm.Username);
string _uPass = encode(loginAccountForm.Password);
_navigationManager.NavigateTo("/login?paramUsername="+ _uName + "&paramPassword=" + _uPass, true);
}
private string encode(string param)
{
return HttpUtility.UrlEncode(param);
}
}
public class LoginAccountForm
{
[Required (ErrorMessage = "Необходим логин")]
[StringLength(30, ErrorMessage = "Допустимая длина логина от 3 до 30 символов ", MinimumLength = 3)]
public string Username { get; set; }
[Required(ErrorMessage = "Необходим пароль")]
[StringLength(30, ErrorMessage = "Допустимая длина пароля от 3 до 30 символов ", MinimumLength = 3)]
public string Password { get; set; }
}
}

@ -1,3 +1,4 @@
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Hosting.StaticWebAssets; using Microsoft.AspNetCore.Hosting.StaticWebAssets;
@ -11,6 +12,11 @@ StaticWebAssetsLoader.UseStaticWebAssets(builder.Environment, builder.Configurat
// Add services to the container. // Add services to the container.
builder.Services.AddRazorPages(); builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor(); builder.Services.AddServerSideBlazor();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
builder.Services.AddSingleton<BiudAuthService>();
builder.Services.AddSingleton<WeatherForecastService>(); builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddMudServices(); builder.Services.AddMudServices();

Loading…
Cancel
Save