मैं डोमेन नियंत्रक के खिलाफ प्रमाण-पत्रों का एक सेट मान्य करना चाहता हूं। उदाहरण:डोमेन प्रमाण-पत्र (मूल कोड से) को कैसे सत्यापित करें?
Username: joel
Password: splotchy
Domain: STACKOVERFLOW
.NET 3.5 और नए you can use PrincipalContext.ValidateCredentials(username, password)
में।
अन्यथा आप परेशानी में हैं।
ss = AcceptSecurityContext(
@pAS._hcred, //[in]CredHandle structure
phContext, //[in,out]CtxtHandle structure
@InBuffDesc, //[in]SecBufferDesc structure
0, //[in]context requirement flags
SECURITY_NATIVE_DREP, //[in]target data representation
@pAS._hctxt, //[in,out]CtxtHandle strcture
@OutBuffDesc, //[in,out]SecBufferDesc structure
ContextAttributes, //[out]Context attribute flags
@Lifetime); //[out]Timestamp struture
छोड़कर समारोह के साथ विफल हो कि
:
Microsoft Knowledge Base आलेख How to validate user credentials on Microsoft operating systems में कोड के बाद, मैं बिंदु जहां AcceptSecurityContext
कॉल करने के लिए मिलता है
SEC_E_NO_AUTHENTICATING_AUTHORITY
(0x80090311)फ़ंक्शन विफल हुआ। प्रमाणीकरण के लिए कोई प्राधिकारी से संपर्क नहीं किया जा सका। यह निम्न स्थितियों के कारण हो सकता है:
- प्रमाणीकरण पार्टी का डोमेन नाम गलत है।
- डोमेन अनुपलब्ध है।
- ट्रस्ट रिलेशनशिप विफल रहा है।
यह एक उपयोगी त्रुटि हो जाएगा, सिवाय इसके कि मैं का उपयोग कर .NET 3.5 से एक ही क्रेडेंशियल्स को सत्यापित कर सकते हैं:
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, domain))
{
valid = context.ValidateCredentials(username, password);
}
हो रहा हो सकता क्या कि क्रेडेंशियल्स का एक सेट को मान्य करने के लिए अनुमति देता है नेट , जबकि देशी कोड नहीं कर सकता?
अद्यतन: LogonUser
भी विफल रहता है: मैं दोनों को प्राथमिकता दी Negotiate
प्रदाता की कोशिश की है, साथ ही:
LogonUser("[email protected]", null, "splotchy",
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token);
1311 - There are currently no logon servers available to service the logon request
अद्यतन दो साथ वें ई विंडोज NT4 विरासत "NTLM" प्रदाता
String package = "Negotiate"; //"NTLM"
QuerySecurityPackageInfo(package, [out] packageInfo);
...
AcquireCredentialsHandle(
null, //[in] principle
package, //[in] package
SECPKG_CRED_OUTBOUND, //[in] credential use
null, //[in] LogonID
pAuthIdentity, //[in] authData
null, //[in] GetKeyFn, not used and should be null
null, //[in] GetKeyArgument, not used and should be null
credHandle, //[out] CredHandle structure
expires); //[out] expiration TimeStamp structure
आप 'InitializeSecurityContext' को कैसे कॉल कर रहे हैं? (विशेष रूप से कौन सा एसएसपी?) आप 'क्रेडहैंडल' कैसे स्थापित कर रहे हैं? –
@EdwardThomson मैंने पसंदीदा 'नेगोशिएट' प्रदाता, साथ ही 'एनटीएलएम 'की कोशिश की है। 'CredHandle' को 'AcquireCredentialsHandle'' पर कॉल के माध्यम से प्रारंभ किया गया है। –
मुझे एक समान समस्या होने की याद आ रही है, हालांकि यह साल पहले था और मुद्दा अस्पष्ट है। यदि आप w/उन्नत अनुमतियां चलाते हैं तो क्या कोई बदलाव है? (डोमेन व्यवस्थापक शायद?) –