這可能是一個愚蠢的問題,但是可以從Active Directory獲取當前登錄用戶的GSSAPI令牌嗎?C#中的GSSAPI和活動目錄
我有一個簡單的庫連接到服務器。我可以傳遞用戶名,密碼和域名或GSS令牌(base64)。 現在,第一種方法適用於我,但用戶必須輸入密碼令人討厭。
我找不到任何有關GSSAPI的信息,並且它與Active Directory集成。
在C#中可能嗎?
基於@Harvey國意見的一些更多的信息: 庫被稱爲Altair COM
,它是用於文件管理
下面是關於登錄一些API的參考與GSS:
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
}
但我必須輸入令牌,我仍然在試圖生成它爲當前用戶。
它是什麼簡單的庫?需要什麼標記?你在說什麼GSS令牌?我認爲這是從GSSAPI返回的上下文令牌?你在用什麼GSSAPI?您是使用MIT GSSAPI還是使用Windows SSPI? –
@HarveyKwok - 我編輯了我的問題並添加了一些API參考。我目前沒有使用任何GSSAPI。正如我現在寫的,usem必須登錄到他的電腦(當然是域),然後當他開始我的申請時,他必須第二次輸入他的密碼,我想避免這種情況。我唯一的選擇是GSSAPI,但我不知道如何使用它:/ – Misiu
@Misiu你設法達到這個目標嗎?我需要使用GSSAPI身份驗證連接到LDAP服務器。你能在C#中提供一些示例代碼嗎?在網上找不到任何東西 – mayooran