0
C1ログオン機能を拡張するためのベストプラクティスは何ですか?パスワード認証をマルチファクタ認証に置き換えることにより、現在のログオンプロセスに機能を拡張したいと考えています。私は、マルチファクター認証を完了した後にC1へのユーザー認証を許可するために、C1の主要な概念とフックを知ることに興味があります。システムログオン機能の拡張
C1ログオン機能を拡張するためのベストプラクティスは何ですか?パスワード認証をマルチファクタ認証に置き換えることにより、現在のログオンプロセスに機能を拡張したいと考えています。私は、マルチファクター認証を完了した後にC1へのユーザー認証を許可するために、C1の主要な概念とフックを知ることに興味があります。システムログオン機能の拡張
あなたはこのディスカッションを見ましたか?http://compositec1.codeplex.com/discussions/268428?ここには、ユーザー名とパスワードの組み合わせを認証するときに呼び出されるILoginProvider
インターフェイスを実装するクラスのサンプルコードがあります。
public class LDAPLoginProvider : IFormLoginProvider
{
public bool CanSetUserPassword
{
get { return false; }
}
public bool CanAddNewUser
{
get { return false; }
public bool UsersExists
{
get { return DataFacade.GetData<IUser>().Any(); }
}
public IEnumerable<string> AllUsernames
{
get { return (from u in DataFacade.GetData<IUser>() select u.Username).ToList(); }
}
void SetUserPassword(string username, string password)
{
throw new NotImplementedException();
}
void AddNewUser(string userName, string password, string group)
{
throw new NotImplementedException();
}
LoginResult Validate(string username, string password)
{
var user =
(from u in DataFacade.GetData<IUser>()
where String.Compare(u.Username, username, StringComparison.InvariantCultureIgnoreCase) == 0
select u).FirstOrDefault();
if (user == null)
{
return LoginResult.UserDoesNotExist;
}
bool loginIsValid = false;
try
{
var entry = new DirectoryEntry("LDAP://domain.com", username, password);
object nativeObject = entry.NativeObject;
loginIsValid = true;
}
catch (DirectoryServicesCOMException ex)
{
//not authenticated; reason why is in ex
}
catch (Exception ex)
{
//not authenticated due to some other exception
}
return loginIsValid ? LoginResult.Success : LoginResult.IncorrectPassword;
}
}
ここでもユーザーはC1で作成する必要がありますが、パスワードは外部ソース(ここではLDAPサーバー)に対して検証されます。