我目前正在研究将从Lotus Notes 8.5调用的.NET应用程序。该.NET应用程序假定从Lotus Notes数据库中读取一些数据,并将其导出到文件中。
连接Lotus Notes数据库的代码是:
NotesSession ns = new NotesSession();
NotesView nv;
ns.Initialize("");
NotesDatabase nd = ns.GetDatabase("server", "file.nsf", false);
nv = nd.GetView("viewName");
不幸的是,当调用ns.Initialize时,Lotus Notes组件将提示用户输入密码。我知道方法Initialize被重载,可以提供用户名和密码。但是,我不知道用户名/密码。
由于Lotus Notes已经打开,是否有办法使用已登录Lotus Notes的用户凭据访问Notes数据库?基本上,我想避免让用户再次输入他们的Notes凭据,但仍然可以访问数据库。
答案 0 :(得分:2)
可以在“用户安全性”对话框的Notes中打开一个设置。 (您没有提到Lotus Notes的版本。如果您使用的是旧版本,则对话框可能会有所不同。)设置为:
Don't prompt for a password from other Lotus Notes-based programs (reduces security)
。
最后两个单词可能在括号中,但不要让那个骗过你。它们非常重要!该设置允许在该用户计算机上运行的所有程序无需身份验证即可使用Notes API。这为电子邮件传播的恶意软件以及其他威胁打开了大门。而且不要紧,在Lotus Notes世界中这种威胁很少见。其中很大一部分原因是禁用此设置是默认设置。
从我上面所说的,我相信你能理解为什么没有一种简单的方法可以做你想做的事情!
禁用专门用于您的应用程序的密码提示的唯一方法是使用Lotus Notes C API的功能集称为Extension Manager。即,您编写了一个编译为DLL的C源文件。您的DLL必须安装在所有用户的计算机上,并且必须在notes.ini文件中创建一个条目,以便在Notes核心DLL运行时加载它。 C API的帮助文件包含一些示例代码,说明如何执行此特定于Notes的部分。您必须弄清楚识别为您的应用程序调用它的事实的细节,并且(如果我没记错的话)您还必须编写代码以提示用户输入一次密码并负责安全地存储它您的DLL可以在需要时检索和解密的地方。
答案 1 :(得分:0)
我确实找到了另一种方法来执行此操作,而不必转向“不要从其他基于Lotus Notes的程序提示输入密码(降低安全性)”。复选框。
System.Type objNotesType = System.Type.GetTypeFromProgID("Notes.NotesSession");
dynamic ns = System.Activator.CreateInstance(objNotesType);
dynamic nd = ns.GetDatabase(AppSettings.NotesServer, AppSettings.NotesReplicaID);
if (nd.IsOpen != true) nd.OpenByReplicaID(nd.Server, AppSettings.NotesReplicaID);
dynamic nv = nd.GetView(AppSettings.NotesView);
我测试了它,它的确有效。我没有被提示输入密码,在访问Notes数据库时,我正在使用当前用户的凭据访问它。此外,不需要将COM引用添加到项目中。