// // Summary // Start the import card user interface // public static void Import(string fileName) { if (String.IsNullOrEmpty(fileName)) { throw IDT.ThrowHelperArgumentNull("fileName"); } IDT.TraceDebug("Import Infocard has been called"); Int32 result = CardSpaceSelector.GetShim().m_csShimImportInformationCard(fileName); // // Convert HRESULTS to errors // if (0 != result) { // // Convert the HRESULTS to exceptions // ExceptionHelper.ThrowIfCardSpaceException((int)result); throw IDT.ThrowHelperError(new CardSpaceException(SR.GetString(SR.ClientAPIInfocardError))); } }
// Summary // Request a security token from the infocard system // // Parameters // policyChain - an array of PolicyElements that describe the federated security chain that the client // needs a final token to unwind. // public static GenericXmlSecurityToken GetToken(CardSpacePolicyElement[] policyChain, SecurityTokenSerializer tokenSerializer) { IDT.TraceDebug("ICARDCLIENT: GetToken called with a policy chain of length {0}", policyChain.Length); InfoCardProofToken proofToken = null; InternalRefCountedHandle nativeCryptoHandle = null; GenericXmlSecurityToken token = null; RpcGenericXmlToken infocardToken = new RpcGenericXmlToken(); SafeTokenHandle nativeToken = null; Int32 result = 0; if (null == policyChain || 0 == policyChain.Length) { throw IDT.ThrowHelperArgumentNull("policyChain"); } if (null == tokenSerializer) { throw IDT.ThrowHelperArgumentNull("tokenSerializer"); } if (null == tokenSerializer) { throw IDT.ThrowHelperArgumentNull("tokenSerializer"); } try { RuntimeHelpers.PrepareConstrainedRegions(); bool mustRelease = false; try { } finally { // // The PolicyChain class will do the marshalling and native buffer management for us. // try { using (PolicyChain tmpChain = new PolicyChain(policyChain)) { IDT.TraceDebug("ICARDCLIENT: PInvoking the native GetToken call"); result = GetShim().m_csShimGetToken( tmpChain.Length, tmpChain.DoMarshal(), out nativeToken, out nativeCryptoHandle); } if (0 == result) { IDT.TraceDebug("ICARDCLIENT: The PInvoke of GetToken succeeded"); nativeToken.DangerousAddRef(ref mustRelease); infocardToken = (RpcGenericXmlToken)Marshal.PtrToStructure( nativeToken.DangerousGetHandle(), typeof(RpcGenericXmlToken)); } } finally { if (mustRelease) { nativeToken.DangerousRelease(); } } } if (0 == result) { using (ProofTokenCryptoHandle crypto = (ProofTokenCryptoHandle)CryptoHandle.Create(nativeCryptoHandle)) { proofToken = crypto.CreateProofToken(); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(infocardToken.xmlToken); SecurityKeyIdentifierClause internalTokenReference = null; if (null != infocardToken.internalTokenReference) { internalTokenReference = tokenSerializer.ReadKeyIdentifierClause( CreateReaderWithQuotas(infocardToken.internalTokenReference)); } SecurityKeyIdentifierClause externalTokenReference = null; if (null != infocardToken.externalTokenReference) { externalTokenReference = tokenSerializer.ReadKeyIdentifierClause( CreateReaderWithQuotas(infocardToken.externalTokenReference)); } IDT.TraceDebug("ICARDCLIENT: Constructing a new GenericXmlSecurityToken"); token = new GenericXmlSecurityToken( xmlDoc.DocumentElement, proofToken, DateTime.FromFileTimeUtc(infocardToken.createDate), DateTime.FromFileTimeUtc(infocardToken.expiryDate), internalTokenReference, externalTokenReference, null); } else { IDT.TraceDebug("ICARDCLIENT: The PInvoke of GetToken failed with a return code of {0}", result); // // Convert the HRESULTS to exceptions // ExceptionHelper.ThrowIfCardSpaceException((int)result); throw IDT.ThrowHelperError(new CardSpaceException(SR.GetString(SR.ClientAPIInfocardError))); } } catch { if (null != nativeCryptoHandle) { nativeCryptoHandle.Dispose(); } if (null != proofToken) { proofToken.Dispose(); } throw; } finally { if (null != nativeToken) { nativeToken.Dispose(); } } return(token); }