dashezhi 发表于 2010-11-8 22:13:02

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();
      }
    }
}

dashezhi 发表于 2010-11-8 22:28:01

总之如果做成winform就一点问题都没有,做成系统服务就不行,怎么样都没法正常认证,两边的代码都是一样的...不知道问题出在哪里..

dashezhi 于 2010-11-9 16:30 补充以下内容

晕死,居然没人帮忙,我自己搞定了!!!

job21 发表于 2010-11-11 13:35:25

楼主真厉害啊,搞定也分享下方法吧

jamesp 发表于 2010-11-11 13:58:43

:shutup:解决了就把问题设置为已解决呀,本来还想进来看看是否能帮到。

dashezhi 发表于 2010-11-12 08:04:57

帖子不能编辑了,没法改噢
我说一下问题出在哪里吧
上面的代码都是正确的,问题出在建立系统服务的时候,服务的登陆类型要设置成网络服务或者本地用户
如果设置成本地系统或者系统服务就不行....关于这点我也有点搞不清楚为什么..还请高人解答.

kui2004 发表于 2010-12-26 18:14:26

看不明白..楼主强人...不过你的图片好像在哪里看过.

j48555247 发表于 2011-2-22 21:04:54

本地系统或者系统服务 需要登录才运行服务。
网络服务 不需要用户登录,默认运行该服务。

阿烈 发表于 2011-7-22 09:09:43

写成后台服务需要用户验证吧,后台服务可以是system

lipengyu1573 发表于 2015-4-14 16:22:24

楼主,我在做RTX与openldap的集成,有些问题不太清楚,想请教您一下,能给留个联系方式吗

happy20110115 发表于 2015-4-14 18:38:13

感觉很高深的问题,看看能否解决掉
页: [1]
查看完整版本: RTX 第三方认证 熟悉C#的进来帮忙