2012-01-07 10 views
0

C1ログオン機能を拡張するためのベストプラクティスは何ですか?パスワード認証をマルチファクタ認証に置き換えることにより、現在のログオンプロセスに機能を拡張したいと考えています。私は、マルチファクター認証を完了した後にC1へのユーザー認証を許可するために、C1の主要な概念とフックを知ることに興味があります。システムログオン機能の拡張

答えて

0

あなたはこのディスカッションを見ましたか?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サーバー)に対して検証されます。