0

C1 ログオン機能を拡張するためのベスト プラクティスは何ですか。パスワード認証を多要素認証に置き換えて、現在のログオン プロセスに機能を拡張したいと考えています。多要素認証の完了後に C1 へのユーザー認証を許可するための主要な概念と C1 へのフックについて知りたいと思っています。

4

1 に答える 1

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サーバー)に対して検証されます。

于 2012-01-07T12:03:07.983 に答える