这可能是一个愚蠢的问题,但是否可以从 Active Directory 获取当前登录用户的 GSSAPI 令牌?
我有一个连接到服务器的简单库。我可以传递用户名、密码和域名或 GSS 令牌(base64)。目前第一种方法对我有用,但用户必须输入密码让他们很恼火。
我找不到任何关于 GSSAPI 的信息以及它与 Active Directory 的集成。
在 C# 中可能吗?
基于@Harvey Kwok 评论的更多信息: Library is called Altair COM
and it is used for document management
以下是有关使用 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
}
但是我必须输入该令牌,并且我仍在尝试为当前用户生成它。