我想将用户放入ADAM实例,以便ADAM看起来类似于典型的真实Active Directory服务器.
我正在开发一个与LDAP集成的应用程序.我已经使用OpenLDAP及其core.schema进行了测试.现在我想使用Active Directory进行测试,但是使用我的设备最接近的是使用Microsoft ADAM进行测试.
我不确切知道如何从ADAM开始.零经验和Active Directory.我猜我需要导入MS-AdamSchemaW2K3.LDF,因为我在那里看到"sAMAccountName",我想我希望它像Active Directory一样?
阅读几个答案后添加...
到目前为止,答案对于我正在寻找的内容还不够具体.我确实让ADAM工作,我的应用程序可以与它通信,但我想做的是让ADAM以典型的方式运行(如果有这样的事情)Active Directory安装可以工作,相同的架构,身份验证,即使我只是在Windows XP上的工作组网络中使用ADAM.
我目前正在使用ActiveDirectoryMembershipProvider仅用于在asp.net内置的内部业务应用程序进行身份验证.这就像一个魅力.
我现在希望添加一些功能来处理用户的自定义配置文件信息,理想情况下也存储在Active Directory中.
举一个简单的例子,我们只说自定义属性是FavoriteColor.然后我的目标是让我的应用程序能够为经过身份验证的用户读取此自定义属性.
我已经看了一下ADAM.对于角色提供者来说,这看起来很棒,但我还没有找到任何表明它适用于Profile Provider的东西,或者它甚至可以让我存储像FavoriteColor这样的自定义属性.也许有人知道更好?
我也是Active Directory的新手,所以也许甚至可以选择在其中存储自定义用户属性(如FavoriteColor)?
总的来说,我只是在寻找有关实施此方法的最佳方法的想法?
谢谢!
我正在尝试使用spring-security来获取Java应用程序,以便与我设置的本地ADAM实例进行通信.
我已成功安装ADAM并设置如下....
O=Company
OU=Company Users
(orgnizationalUnit)
CN=Mike Q
(用户)的granchilduid = mike
和 password = welcome
然后我设置了spring-security(版本3.0.3,spring-framework 3.0.4和spring-ldap 1.3.0).弹簧文件
<security:ldap-server id="contextSource" url="ldap://localhost:389/o=Company"/>
<security:authentication-manager>
<security:ldap-authentication-provider user-dn-pattern="uid={0},ou=Company Users"/>
</security:authentication-manager>
<bean class="com.xxx.test.TestAuthentication" lazy-init="false"/>
Run Code Online (Sandbox Code Playgroud)
和TestAuthentication
public class TestAuthentication
{
@Autowired
private AuthenticationManager authenticationManager;
public void initialise()
{
Authentication authentication = new UsernamePasswordAuthenticationToken( "mike", "welcome" );
Authentication reponseAuthentication = authenticationManager.authenticate( authentication );
}
}
Run Code Online (Sandbox Code Playgroud)
运行这个我得到以下错误
Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C090336, comment: AcceptSecurityContext error, data 2030, …
Run Code Online (Sandbox Code Playgroud) 在我的开发机器上,我不得不安装AD-LDS.原则上它工作正常,但是第一次通过PrincipalContext类连接到AD-LDS非常慢(30秒+).在我看来,它首先尝试连接到一些不存在的主机或目录,然后在超时(30秒)后连接到我的AD-LDS并执行它应该做的事情.
与LDP.exe和SSL连接时观察到的相同行为.但是使用ADSI-Edit,通过SSL连接速度非常快.所以通过非SSL连接.
我看着是否能在小提琴手中看到一些东西,但什么都没有.同样在事件日志中我什么都找不到.也许它与证书查找有关?它是用makecert自签名的.
更新
在此期间,我观察到一个可能提示的小事:在系统事件日志中,第一次建立与AD-LDS的SSL连接时,将显示以下消息:
machineName
在没有配置的DNS服务器响应后,名称_ldap._tcp.[ ]的名称解析超时
但是,该消息仅注册一次,但每次连接到服务器需要30secs +.我还尝试在hosts文件中输入相应的条目,但没有任何改变.
附加信息
可能这不是证书的问题,但可能有助于解决问题.因此,我在这里创建证书的方式(或多或少的货物代码):
RootAuthority
makecert -pe -n "CN=MyDevRootAuthority" -ss my -sr LocalMachine -a sha1 -sky signature -r "MyDevRootAuthority.cer"
Run Code Online (Sandbox Code Playgroud)
服务器证书
makecert -pe -n "CN=[MyComputerName]" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -in "MyDevRootAuthority" -is MY -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "MyTestCertificate.cer"
Run Code Online (Sandbox Code Playgroud)
创建后,我将根权限移动到受信任的权限,并授予所需的权限.
在LDAP中创建新的objectClasses时选择RDN的最佳做法是什么?我知道你可以选择uid,cn,ou等,但是应该遵循哪些做法?
是否有工具使工作更轻松?如果存在仅命令行工具,那么任何人都可以推测是否存在GUI工具的市场?例如,您可以通过可视化建模来创建关系数据库.LDAP应该存在相同的概念吗?
有人知道允许开发人员浏览 LDAP 服务器并查看 objectClasses 和 attributeClasses 的“基于 Web”的应用程序吗?理想情况下,我会喜欢用 Java 或 .NET 编写的开源软件。
我正在尝试在我的MVC应用程序中使用AD LDS进行用户身份验证.我设法写了一些代码,允许我创建/编辑/删除用户和组,但我似乎无法验证它们.这是我的示例代码:
using( var context = new PrincipalContext(ContextType.ApplicationDirectory, "Lenovo_T61-LapT",
"CN=Kontrahenci,DC=TestApp,DC=local"))
{
var userName = "avg.joe";
var email = "avg.joe@smwhr.us";
var password = "123456";
var user = new UserPrincipal(context)
{
Name = userName,
EmailAddress = email
};
user.SetPassword(password);
user.Save();
if (context.ValidateCredentials(userName , password, ContextOptions.SimpleBind))
Console.WriteLine("Hooray!");
user.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这永远不会得到"Writeline"只给出一个密码或用户名不正确的错误.
我玩过ContextOptions但没有任何运气.
有任何想法吗?
我在这里浏览了一个基本的 PyTorch MNIST 示例,并注意到当我将优化器从 SGD 更改为 Adam 时,模型没有收敛。具体来说,我将第 106 行从
optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)
Run Code Online (Sandbox Code Playgroud)
到
optimizer = optim.Adam(model.parameters(), lr=args.lr)
Run Code Online (Sandbox Code Playgroud)
我认为这不会对模型产生影响。使用 SGD,损失在大约四分之一的 epoch 后迅速降至低值。然而,对于 Adam,即使在 10 个 epoch 之后,损失也没有下降。我很好奇为什么会这样;在我看来,这些应该具有几乎相同的性能。
我在 Win10/Py3.6/PyTorch1.01/CUDA9 上运行这个
为了节省一点代码挖掘的时间,这里是超参数:
我的问题很简单,但我在网上找不到明确的答案(到目前为止)。
在定义的训练周期数之后,我使用以下方法保存了使用 adam 优化器训练的 keras 模型的权重:
callback = tf.keras.callbacks.ModelCheckpoint(filepath=path, save_weights_only=True)
model.fit(X,y,callbacks=[callback])
Run Code Online (Sandbox Code Playgroud)
当我关闭 jupyter 后恢复训练时,我可以简单地使用:
model.load_weights(path)
Run Code Online (Sandbox Code Playgroud)
继续训练。
由于 Adam 依赖于 epoch 数(例如在学习率衰减的情况下),我想知道在与以前相同的条件下恢复训练的最简单方法。
按照 ibarrond 的回答,我编写了一个小的自定义回调。
optim = tf.keras.optimizers.Adam()
model.compile(optimizer=optim, loss='categorical_crossentropy',metrics=['accuracy'])
weight_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1, save_best_only=False)
class optim_callback(tf.keras.callbacks.Callback):
'''Custom callback to save optimiser state'''
def on_epoch_end(self,epoch,logs=None):
optim_state = tf.keras.optimizers.Adam.get_config(optim)
with open(optim_state_pkl,'wb') as f_out:
pickle.dump(optim_state,f_out)
model.fit(X,y,callbacks=[weight_callback,optim_callback()])
Run Code Online (Sandbox Code Playgroud)
当我恢复训练时:
model.load_weights(checkpoint_path)
with open(optim_state_pkl,'rb') as f_out:
optim_state = pickle.load(f_out)
tf.keras.optimizers.Adam.from_config(optim_state)
Run Code Online (Sandbox Code Playgroud)
我只是想检查一下这是否正确。再次感谢!!
附录:在进一步阅读Adam的默认Keras 实现和原始 Adam 论文时,我认为默认 Adam 不依赖于纪元数,而仅依赖于迭代数。因此,这是不必要的。但是,对于希望跟踪其他优化器的任何人,该代码可能仍然有用。
这是张量流优化器的链接。您可以看到,RMSprop 将动量作为参数,而 Adam 没有这样做。所以我很困惑。Adam 优化假装是具有动量的 RMSprop 优化,如下所示:
Adam = RMSprop + 动量
但为什么 RMSprop 有动量参数而 Adam 没有呢?
我已经设置了一个ADAM实例并添加了一些测试用户.从c#我可以使用Windows帐户绑定到ADAM,但我无法使用其中一个ADAM用户进行绑定.(我可以成功绑定ldp中的adam用户)我确保通过将msDS-UserAccountDisabled属性设置为false来启用用户.当我与我的Windows帐户绑定时,我可以成功搜索并恢复ADAM用户的属性,但我仍在努力验证它们,当我尝试使用ADAM用户帐户绑定时,我收到错误:
错误:System.Runtime.InteropServices.COMException(0x8007052E):登录失败:未知的用户名或密码错误.在System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
这是我正在使用的代码:
string userName = txtUserName.Text;
string password = txtPassword.Text;
string ADConnectionString = "LDAP://localhost:389/CN=sandbox,DC=ITOrg";
DirectoryEntry entry = new DirectoryEntry(ADConnectionString);
entry.Username = "myComputer\\Administrator";
entry.Password = "myPassword";
try
{
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "(&(objectClass=user)(CN=" + userName + "))";
SearchResultCollection result = searcher.FindAll();
if (result.Count > 0)
{
//bind with simple bind
using (DirectoryEntry de = new DirectoryEntry(result[0].Path, userName, password,AuthenticationTypes.None))
{
if (de.Guid != null) // this is the line where it dies
{
Label1.Text = "Successfully authenticated"; …
Run Code Online (Sandbox Code Playgroud)