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