Я пытаюсь понять правильный способ сделать аутентификацию в ASP.NET Core. Я просмотрел несколько ресурсов (большинство из которых устарело).
Некоторые люди предоставляют альтернативные решения, предлагающие использовать облачное решение, такое как Azure AD, или использовать IdentityServer4 и размещать мой собственный Token Server.
В старой версии .Net одной из самых простых форм аутентификации было бы создание пользовательского Iprinciple и сохранение дополнительных пользовательских данных аутентификации внутри.
public interface ICustomPrincipal : System.Security.Principal.IPrincipal
{
string FirstName { get; set; }
string LastName { get; set; }
}
public class CustomPrincipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public CustomPrincipal(string username)
{
this.Identity = new GenericIdentity(username);
}
public bool IsInRole(string role)
{
return Identity != null && Identity.IsAuthenticated &&
!string.IsNullOrWhiteSpace(role) && Roles.IsUserInRole(Identity.Name, role);
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
}
public class CustomPrincipalSerializedModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Затем вы будете сериализовать свои данные в файл cookie и вернуть его клиенту.
public void CreateAuthenticationTicket(string username) {
var authUser = Repository.Find(u => u.Username == username);
CustomPrincipalSerializedModel serializeModel = new CustomPrincipalSerializedModel();
serializeModel.FirstName = authUser.FirstName;
serializeModel.LastName = authUser.LastName;
JavaScriptSerializer serializer = new JavaScriptSerializer();
string userData = serializer.Serialize(serializeModel);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,username,DateTime.Now,DateTime.Now.AddHours(8),false,userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies.Add(faCookie);
}
Мои вопросы:
-
Как я могу аутентифицироваться аналогично тому, как это было сделано в предыдущей версии .Net, старый способ все еще работает или есть более новая версия.
-
Каковы плюсы и минусы использования ваших собственных токенов-серверов, создающих собственный собственный принцип?
-
При использовании облачного решения или отдельного сервера Token, как бы вы интегрировали его с вашим текущим приложением, мне все равно нужна таблица пользователей в моем приложении, как бы вы связали эти два?
-
Поскольку существует так много разных решений, как я могу создать корпоративное приложение, чтобы разрешить вход в систему через Gmail/Facebook, хотя он еще может расширяться до других
- Каковы некоторые простые реализации этих технологий?