RTX 第三方认证 熟悉C#的进来帮忙
本帖最后由 dashezhi 于 2010-11-8 22:20 编辑我现在想把RTX的第三方认证应用做成windows系统服务,随机启动...这里我的RTX用户是通过域来进行身份验证的,也就是说在RTX登陆客户端直接输入域用户名及密码进行登陆...当然我事先已经做好二者的用户同步了..
现在遇到一个问题,就是我把相应功能的服务建立并启动好之后,再打开RTX客户端登陆的时候无论输入什么密码都提示密码错误,无法登陆....
而最令人不解的是,我用同样的代码写成winform程序,却能正常的进行域用户验证!!!
下面是我生成windows服务程序的代码..有熟悉的人帮我看看呐..万分感谢!!!
代码在这里好像不太直观..请朋友们把代码复制过去放到文本文档里看吧,那样好看一点..
namespace WindowsService1
{
public partial class RTXThirdAuth : ServiceBase
{
public RTXSAPIRootObj rootObj; //声明根对象
public RTXSAPIUserAuthObj rtxUserAuth; //用户认证对象
public RTXThirdAuth()
{
InitializeComponent();
rootObj = new RTXSAPIRootObj();
rootObj.ServerIP = "10.1.6.2"; //这是我RTX服务器地址
rootObj.ServerPort = 8006; //端口
rtxUserAuth = rootObj.UserAuthObj;
rtxUserAuth.AppGUID = "{7D37D232-35EA-43B7-B2EF-CEE88D9C50D4}";
rtxUserAuth.AppName = "RTXThirdAuth";
rtxUserAuth.OnRecvUserAuthRequest += new _IRTXSAPIUserAuthObjEvents_OnRecvUserAuthRequestEventHandler(rtxUserAuth_OnRecvUserAuthRequest);
}
public void rtxUserAuth_OnRecvUserAuthRequest(string bstrUserName, string bstrPwd, out RTXSAPI_USERAUTH_RESULT pResult)
//RTX用户登陆时触发的事件
{
DirectoryEntry adEnt = new DirectoryEntry(LDAP://10.1.6.1/OU=Accounts,DC=test,DC=local);
//这是我的域地址,我的用户都在 test.local/Accounts 组织单位下面
adEnt.Username = bstrUserName;
adEnt.Password = bstrPwd;
adEnt.AuthenticationType = AuthenticationTypes.Secure;
adEnt.UsePropertyCache = true;
DirectorySearcher adSearch = new DirectorySearcher(adEnt);
adSearch.Filter = "(objectClass=user)";
//过滤查找test.local/Accounts 组织单位下面的全部域用户信息
try
{
SearchResultCollection resCol = adSearch.FindAll();
//查找全部域用户信息,如果这里抛出异常则说明上面传入的bstrUserName用户名 与 bstrPwd密码 不正常,理应认证失败,否则认证成功.
if (resCol.Count > 0)
pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_OK;
else
pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_ERRPWD;
resCol.Dispose();
}
catch (COMException ex)
{
pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_ERRPWD;
}
finally
{
adSearch.Dispose();
adEnt.Dispose();
}
}
protected override void OnStart(string[] args)//重写服务启动事件
{
rtxUserAuth.RegisterApp();
rtxUserAuth.StartApp("", 4);
}
protected override void OnStop() //重写服务停止事件
{
rtxUserAuth.StopApp();
rtxUserAuth.UnRegisterApp();
}
}
}
总之如果做成winform就一点问题都没有,做成系统服务就不行,怎么样都没法正常认证,两边的代码都是一样的...不知道问题出在哪里..
dashezhi 于 2010-11-9 16:30 补充以下内容
晕死,居然没人帮忙,我自己搞定了!!! 楼主真厉害啊,搞定也分享下方法吧 :shutup:解决了就把问题设置为已解决呀,本来还想进来看看是否能帮到。 帖子不能编辑了,没法改噢
我说一下问题出在哪里吧
上面的代码都是正确的,问题出在建立系统服务的时候,服务的登陆类型要设置成网络服务或者本地用户
如果设置成本地系统或者系统服务就不行....关于这点我也有点搞不清楚为什么..还请高人解答. 看不明白..楼主强人...不过你的图片好像在哪里看过. 本地系统或者系统服务 需要登录才运行服务。
网络服务 不需要用户登录,默认运行该服务。 写成后台服务需要用户验证吧,后台服务可以是system 楼主,我在做RTX与openldap的集成,有些问题不太清楚,想请教您一下,能给留个联系方式吗 感觉很高深的问题,看看能否解决掉
页:
[1]