// public static methods /// <summary> /// Initializes the context. /// </summary> /// <param name="credentials">The credentials.</param> /// <param name="servicePrincipalName">Name of the service principal.</param> /// <param name="input">The input.</param> /// <param name="output">The output.</param> /// <returns></returns> public static SecurityContext Initialize(SecurityCredentials credentials, string servicePrincipalName, byte[] input, out byte[] output) { var context = new SecurityContext(); context._credentials = credentials; context.Initialize(servicePrincipalName, input, out output); return context; }
// public methods /// <summary> /// Acquires the credentials handle. /// </summary> /// <param name="package">The package.</param> /// <param name="username">The username.</param> /// <param name="evidence">The evidence.</param> /// <returns>A security credential.</returns> public static SecurityCredentials Acquire(SspiPackage package, string username, MongoIdentityEvidence evidence) { long timestamp; var credentials = new SecurityCredentials(); RuntimeHelpers.PrepareConstrainedRegions(); try { } finally { uint result; var passwordEvidence = evidence as PasswordEvidence; if (passwordEvidence == null) { result = Win32.AcquireCredentialsHandle( null, package.ToString(), SecurityCredentialUse.Outbound, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, ref credentials._sspiHandle, out timestamp); } else { using(var authIdentity = new AuthIdentity(username, passwordEvidence.SecurePassword)) { // TODO: make this secure by using SecurePassword result = Win32.AcquireCredentialsHandle( null, package.ToString(), SecurityCredentialUse.Outbound, IntPtr.Zero, authIdentity, 0, IntPtr.Zero, ref credentials._sspiHandle, out timestamp); } } if (result != Win32.SEC_E_OK) { credentials.SetHandleAsInvalid(); throw Win32.CreateException(result, "Unable to acquire credentials."); } } return credentials; }