ユーザー認証のカスタム認証
これは今日、クラスで実証された例コードです.カスタム認証の簡単な方法は、GenericPrincipleとGenericIdentityで実現するか、カスタムPrincipleとIdentityで実現することです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Security;
using System.Security.Principal;
namespace _03_CustomAuthentication
{
class Program
{
static void Main(string[] args)
{
// (GenericPrinciple)
//
Console.WriteLine(" :");
string username = Console.ReadLine();
Console.WriteLine(" :");
string password = Console.ReadLine();
//
if (AuthenticateUser(username, password))
{
Console.WriteLine(" :{0}!", username);
//GenericPrincipal p =(GenericPrincipal)Thread.CurrentPrincipal;
//Console.WriteLine(" :{0}",
// p.IsInRole("Admin"));
MyPrinciple p = (MyPrinciple)Thread.CurrentPrincipal;
MyIdentity i = p.Identity as MyIdentity;
Console.WriteLine(" :{0}",
p.IsInRole("Admin"));
Console.WriteLine(" :");
foreach (var item in i.Roles)
{
Console.WriteLine(item);
}
}
else
Console.WriteLine(" ");
Console.Read();
}
private static bool AuthenticateUser(string username, string password)
{
if (username == "chenxizhang" && password == "password")
{
#region GenericIdentity
//GenericIdentity identity = new GenericIdentity(
// username,"Custom");
//GenericPrincipal principal = new GenericPrincipal(
// identity,
// new[] { "Admin" });
//Thread.CurrentPrincipal = principal;
#endregion
MyIdentity identity = new MyIdentity(
username,
new[] { "Admin" });
MyPrinciple principle = new MyPrinciple(
identity, identity.Roles);
Thread.CurrentPrincipal = principle;
return true;
}
return false;
}
}
class MyPrinciple : IPrincipal {
public MyPrinciple(IIdentity identity, string[] roles)
{
_identity = identity;
_roles = roles;
}
string[] _roles;
private IIdentity _identity;
private MyPrinciple() { }//
#region IPrincipal
public IIdentity Identity
{
get {
return _identity;
}
}
public bool IsInRole(string role)
{
return _roles.Contains(role);
}
#endregion
}
class MyIdentity : IIdentity {
public MyIdentity(string name, string[] roles) {
_name = name;
_roles = roles;
}
private string[] _roles;
public string[] Roles {
get {
return _roles;
}
}
private MyIdentity() { }
#region IIdentity
public string AuthenticationType
{
get { return " "; }
}
public bool IsAuthenticated
{
get { return true; }
}
private string _name;
public string Name
{
get { return _name; }
}
#endregion
}
}