ASP.NETCoreで認証を行う適切な方法を理解しようとしています。私はいくつかのリソースを見てきました(そのほとんどは時代遅れです)。
一部の人々は、Azure ADなどのクラウドベースのソリューションを使用すること、またはIdentityServer4を使用して独自のトークンサーバーをホストすることを示す代替ソリューションを提供しています。
古いバージョンの.Netでは、認証のより単純な形式の1つは、カスタム原則を作成し、その中に追加の認証ユーザーデータを格納することです。
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で行われたのと同じように認証するには、古い方法が引き続き機能するか、新しいバージョンがありますか。
独自のトークンサーバーを使用することと、独自のカスタム原則を作成することの長所と短所は何ですか?
クラウドベースのソリューションまたは別のトークンサーバーを使用する場合、それを現在のアプリケーションとどのように統合しますか?それでもアプリケーションにユーザーテーブルが必要ですか?2つをどのように関連付けますか?
非常に多くの異なるソリューションがあるので、他のSSOに拡張できる一方で、Gmail / Facebookを介してログインできるようにエンタープライズアプリケーションを作成するにはどうすればよいですか。
- これらのテクノロジーの簡単な実装は何ですか?