Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的GSSAPI和activedirectory#_C#_Active Directory_Gssapi - Fatal编程技术网

C# C语言中的GSSAPI和activedirectory#

C# C语言中的GSSAPI和activedirectory#,c#,active-directory,gssapi,C#,Active Directory,Gssapi,这可能是一个愚蠢的问题,但是否可以从Active Directory获取当前登录用户的GSSAPI令牌 我有一个连接到服务器的简单库。我可以传递用户名、密码和域名或GSS令牌(base64)。 目前,第一种方法对我来说很有效,但用户必须输入密码,这让我很恼火 我找不到有关GSSAPI及其与Active Directory集成的任何信息 在C#中可能吗 有关@Harvey Kwok评论的更多信息: 该库称为Altair COM,用于文档管理 以下是有关使用GSS登录的一些API参考: HRESUL

这可能是一个愚蠢的问题,但是否可以从Active Directory获取当前登录用户的GSSAPI令牌

我有一个连接到服务器的简单库。我可以传递用户名、密码和域名或GSS令牌(base64)。 目前,第一种方法对我来说很有效,但用户必须输入密码,这让我很恼火

我找不到有关GSSAPI及其与Active Directory集成的任何信息

在C#中可能吗

有关@Harvey Kwok评论的更多信息: 该库称为Altair COM,用于文档管理

以下是有关使用GSS登录的一些API参考:

HRESULT LoginGSS(
     [in] VARIANT *token,
     [in] VARIANT_BOOL forceCreateNew,
     [out,retval] VARIANT *retToken)
下面是VB中的示例用法:

Dim token(tokensize) As Byte 'token size-1
’fill token buffer
...
Dim outToken() As Byte
outToken = altair.LoginGSS(token,True)
'if GetLastStatus == AXAPI_ALTAIR_LOGIN_CONTINUE then
'outToken contains return GSS API token
和VC++的用法

SAFEARRAYBOUND sab[1];
sab[0].lLbound=0;
sab[0].cElements=tokensize;
SAFEARRAY *sa;
sa=SafeArrayCreate(VT_UI1,1,sab);
unsigned char HUGEP *buf=NULL;
SafeArrayAccessData(sa,(void HUGEP**)&buf);
//fill token buffer
...
SafeArrayUnaccessData(sa);
v.vt=VT_ARRAY|VT_UI1;
v.pparray=sa;
VARIANT vOut;
pAltair->LoginGSS(&v,true,&vOut);
SafeArrayDestroy(sa);
'if GetLastStatus == AXAPI_ALTAIR_LOGIN_CONTINUE then
'outToken contains return GSS API token
这些都是我掌握的信息


我发现了一些显示登录过程的代码片段:

byte[] token;
token = Convert.FromBase64String(tbToken.Text);
Object o;
o = (Object)token;
Program.altair.LoginGSS(ref o, true);
if ((AXAPILib.AxAPIStatus)altair.GetLastStatus()==AXAPILib.AxAPIStatus.AxAltairLoginOK)
{
    //login ok
}

但我必须输入该令牌,我仍在尝试为当前用户生成它。

不要浪费您的时间。在C语言中使用SpI调用p/jp.< /p> < p>微软在托管C++中使用SSPI(很容易从C调用)的例子:

为什么不用C写呢?我在C++中编写程序集以及管理C++。我很快发现了一个基本的权衡:我是否想用托管语言(如C语言)中的SSPI来处理非托管代码,或者我想用C++编写它,并使用托管扩展来连接到.NET Word?< /P> 对于SSPI,有许多具有复杂参数的函数。这包括很多指针,(嵌套的)结构等等。在C#中编写程序集意味着必须声明SSPI函数参数的托管版本(所有这些复杂类型),然后在将其传递给非托管函数时确保它们正确固定在内存中

在托管C++中编写程序集意味着处理本地环境中的非托管类型。您不必担心固定,也不必重新声明类型(只需拉入适当的头文件)

当构建微软.SAMPPLIES.SITISP.SSPI时,我发现在托管C++中做这项工作比较容易。所有复杂类型都保存在非托管世界中;非托管API在其本机C环境中处理。托管C++提供了一种跨非托管/管理世界之间的鸿沟的伟大方法。 您的里程可能会有所不同,选择将取决于所使用的API。但是使用SSPI,托管扩展比C#这样的高级语言更有意义


它是什么简单的图书馆?需要什么代币?你在说什么GSS代币?我想这是从GSSAPI返回的上下文令牌?你用的是什么GSSAPI?您使用的是麻省理工学院GSSAPI还是Windows SSPI?@HarveyKwok-我已经编辑了我的问题并添加了一些API参考。我目前没有使用任何GSSAPI。正如我现在写的,usem必须登录到他的计算机(当然也要登录到域),然后当他启动我的应用程序时,他必须第二次输入他的密码,我希望避免这种情况。我唯一的选择是GSSAPI,但我不知道如何使用它:/@Misiu你成功实现了吗?我需要使用GSSAPI身份验证连接到LDAP服务器。你能用C语言提供一些示例代码吗?什么也找不到online@mayooran不幸的是没有。需要此功能的系统已经过时,缺少LDAP集成是替换它的另一个原因。大约一年后,我们更换了它,不需要这个功能。对不起,我帮不了你。@Misiu哦,没关系。谢谢你,伙计!我知道这听起来可能是个愚蠢的问题,但SSPI实现了GSS-API?是的,这是正确的。SSPI是GSS-API的Windows专有实现。是否可以添加come代码?我只需要初始化这个令牌,并用我的API将它发送到服务器。没错,没有.NET的引用,对于没有C++经验的人来说,很难让这个工作。我在P/Invoke上搜索,但示例中的行数…非常多。。。我只需要当前广告用户的令牌,这样我就可以使用提供的API登录到该文档管理服务器。这个类怎么样?感谢重播,但您可以添加一些示例代码吗?我已经从你的链接下载了代码,但是大部分都是C++,这可以不用C++吗?也许使用P/Invoke?我真的很感激一些代码:)