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 回答