Аутентификация ASP.Net Core 2.2 - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь определить лучший способ обработки текущей аутентификации для моего приложения.Моё приложение не выполняет никакой аутентификации, но будет обработано со страницы входа в систему, прежде чем попасть в мое приложение.В случае успешной аутентификации мое приложение получит cookie, содержащий учетные данные и другую информацию о пользователе.

Как лучше всего определить, присутствует ли cookie во время сеанса пользователя?В настоящее время я читаю cookie на странице запуска, но это вызывает проблемы, если пользователь добавляет страницу в закладки после этого.Должен ли я проверять на каждом запросе страницы, есть ли файл cookie, или я могу проверить его сразу, когда пользователь заходит на страницу по умолчанию и как-то его сохранить?1005 *

                UserId = _ltpaToken.LTPATokenParse();

                if (UserId == "")
                {
                    _logger.Error("No User found");
                    return RedirectToPage("/Error");
                }
                else
                {
                    HttpContext.Session.SetString("UserId", UserId);
                    return RedirectToPage();
                    //user is good to 
                }

Затем снова проверьте идентификатор пользователя на другой странице

            UserId = _httpContextAccessor.HttpContext.Session.GetString("UserId");

            if(UserId == null)
            {
                Response.Redirect("ToCompanyLoginPage");
            }

            //continue on to page load

Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

если вам нужно что-то отличное от аутентификации по умолчанию , вы можете использовать что-то вроде этого

сначала создайте простой пользовательский класс

public class MyCustomUser
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string GivenName { get; set; }
}

в startup.cs внутри ConfigureServices метод

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
        {
            options.ExpireTimeSpan = TimeSpan.FromDays(7);
            options.LoginPath = "/Account/CustomLogin";
            options.Cookie.Name = "MyAuthCookieName";
        }
    );

в startup.cs внутри Configure метод

app.UseAuthentication();

затемна вашем SignIn действии в вашем контроллере вы могли бы написать что-то вроде этого, что бы сохранить информацию пользователя в претензиях ( что такое претензии? )

//Inside your SignIn method
    //User info should be taken from DB
    MyCustomUser user = new MyCustomUser()
    {
        Id = 1,
        Name = "Mr.Awesome",
        GivenName = "John Doe"
    };

    //Add user information
    List<Claim> claims = new List<Claim>
    {
        new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
        new Claim(ClaimTypes.Name, user.Name),
        new Claim(ClaimTypes.GivenName, user.GivenName)
    };

    //Create the principal user from the claims
    ClaimsIdentity identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    ClaimsPrincipal principal = new ClaimsPrincipal(identity);
    AuthenticationProperties authenticationProperties = new AuthenticationProperties() {IsPersistent = false};

    //Create the authentication cookie and store it
    await this.HttpContext
            .SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, 
             principal, authenticationProperties);

   // DONE!
0 голосов
/ 11 апреля 2019

var currentUserName = User.Identity.Name;

работает везде, также хороши роли.

var currentUserRole = User.IsInRole ("Admin");

контроллер

public class PersonAuthorizationController : Controller
{
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly UserManager<IdentityUser> _userManager;
    private readonly MainDbContext _context;

    public PersonAuthorizationController(
        MainDbContext context, 
        UserManager<IdentityUser> userManager,
        SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _context = context;
    }

    // GET: Contact/PersonAuthorization
    public async Task<IActionResult> Index()
    {
        var currentUserId = _userManager.GetUserId(User);
        return View();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...