Как создать авторизацию Windows-приложения для сайта
Есть сайт на ASP.Net 6 с авторизацией на ASP.Net Identity 3.0. Есть Windows-приложение на .Net 6. Нужно чтобы с приложения пользователь ввёл логин и пароль и получил настройки профиля + некоторые данные с БД для пользователя на сайте. Как это можно сделать. Заранее спасибо за ответы.
ОБНОВЛЕНИЕ 03.10.2022: Решил создать отдельный сервер авторизации для своих личных проектов (спасибо товарищу Andrei Brizhak!)
У меня есть классы пользователя
public sealed class SiteUser: IdentityUser<Guid>
{
#region Базовые настройки
/// <summary>
/// Имя пользователя
/// </summary>
[PersonalData]
public string? FirstName { get; set; }
/// <summary>
/// Фамилия пользователя
/// </summary>
[PersonalData]
public string? LastName { get; set; }
/// <summary>
/// Пол пользователя
/// </summary>
[PersonalData]
public UserGender Gender { get; set; } = UserGender.SexMale;
/// <summary>
/// Дата рождения пользователя
/// </summary>
[PersonalData]
public DateTime BirthdayDate { get; set; }
/// <summary>
/// Расположение пользователя, например, "Белгород, Россия"
/// </summary>
[PersonalData]
public string? UserLocation { get; set; }
/// <summary>
/// Аватар пользователя
/// </summary>
[PersonalData]
public byte[]? Avatar { get; set; }
#endregion
#region Чёрный список
/// <summary>
/// Чёрный список пользователей
/// </summary>
[PersonalData]
public string? BlackList { get; set; }
#endregion
#region Meta-данные
/// <summary>
/// Адрес IP последнего входа пользователя
/// </summary>
[PersonalData]
public string? LastIP { get; set; }
/// <summary>
/// Дата регистрации пользователя
/// </summary>
[PersonalData]
public DateTime RegisterDate { get; set; }
/// <summary>
/// Дата последнего входа пользователя на сайт
/// </summary>
[PersonalData]
public DateTime LastLoginDate { get; set; }
/// <summary>
/// Предыдущий никнейм
/// </summary>
[PersonalData]
public string? PreviousNickName { get; set; }
/// <summary>
/// Дата смены никнейма
/// </summary>
[PersonalData]
public DateTime NickNameChangeDate { get; set; }
#endregion
#region Приватность и соцсети
/// <summary>
/// Настройки приватности аккаунта
/// </summary>
[PersonalData]
public Guid Privacy { get; set; }
/// <summary>
/// СоцCети аккаунта
/// </summary>
[PersonalData]
public Guid SocNets { get; set; }
#endregion
#region Форум
/// <summary>
/// Подпись для форума
/// </summary>
[PersonalData]
public string? ForumSignature { get; set; }
#endregion
#region Удаление пользователя
/// <summary>
/// Маркировка удалённого пользователя
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// Дата удаления пользователя
/// </summary>
public DateTime DeletedAtDate { get; set; }
#endregion
#region Настройка темы
/// <summary>
/// Имя темы
/// </summary>
public string? ThemeName { get; set; }
#endregion
}
и группы пользователя
public sealed class SiteRole: IdentityRole<Guid>
{
/// <summary>
/// Отображаемое имя роли
/// </summary>
public string? RoleName { get; set; }
}
Возможно (и где почитать!) это сделать или нет?
Ответы (2 шт):
JWT или куки. Механизм описан, например, здесь (см. главу 13)
Вкратце можно так:
- В приложении wpf cоздаем объект HttpWebRequest, методом POST шлем логин и пароль
- Веб-приложение получает данные; проверяет, есть ли такой пользователь в базе данных (ну или где-то там, где у Вас хранятся креды пользователей); проверяет права пользователя
- Веб-приложение устанавливает аутентификационные куки, шлет их пользователю
- Wpf-клиент при следующих обращениях к веб-приложению прикручивает полученные куки к запросу. Так веб-приложение поймет, что к нему летят запросы от авторизованного пользователя (пользователя, прошедшего аутентификацию и авторизацию).
Вообще тоже самое может происходить, когда Вы просто входите в свое веб-приложение из браузера. По сути, веб-приложению нет разницы, откуда получать креды по POST - из формы html или из свойств классов wpf-приложения.
P.S. Знаю, мое сообщение не тянет на полноценный ответ. Но, думаю, нет смысла переписывать сюда то, что уже описано в интернете. Я бы просто написал комментарий, да не хватает у меня привилегий, чтобы писать комменты :)
ASP.NET Identity используется для авторизации пользователей, но только Web приложений на платформе ASP.NET. Если Вам нужно хранить данные о пользователях в отдельном приложении для идентификации пользователей, то для этого есть Duende Identity Server . Он условно бесплатный, если ваша компания не зарабатывает более миллиона долларов в год))). При этом Identity Server предоставляет Ресурсы для Идентификации. Клиентом для этого сервиса могут быть любые веб-приложения (включая ASP.NET, JS-фреймворки, ванильный HTML и JS), мобильные приложения, или десктопные приложения. Вот здесь немного теории на русском языке об этом.