在Windows 8中,如何使用C#读取(IE)网站身份验证数据?

时间:2014-03-25 09:37:55

标签: c# windows-8 credentials

我正在谈论如果您打开" Credential Manager"可见的信息。从控制面板或开始菜单。如果你告诉IE保存一个密码就可以在那里看到。

我已经知道了Advapi32.dll(http://www.nuget.org/packages/CredentialManagement/)的包装器,它提供了函数的简单功能:
CredReadW
CredWriteW
CredDeleteW
等。

但此时我甚至不确定这些是否是与网站身份验证数据进行交互的正确功能。我无法阅读现有的或使用这些功能编写新的Web身份验证数据(我甚至不完全了解凭据类型)。写作&阅读CRED_TYPE_GENERIC凭证虽然有效。

如何从C#读取和写入网站验证数据?
如果有必要,我准备p / invoke。

1 个答案:

答案 0 :(得分:2)

在使用Windows 8时,最简单的方法是使用WinRT API。我认为你正在创建一个桌面应用程序(Console,WPF,WinForms),所以你必须:

  1. <TargetPlatformVersion>8.0</TargetPlatformVersion>添加到csproj文件中。

    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProjectGuid>{BEA97844-0370-40C1-A435-F95DC0DC0677}</ProjectGuid> <OutputType>Exe</OutputType> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <TargetPlatformVersion>8.0</TargetPlatformVersion>

  2. 添加对WindowsSystem.Runtime的引用(请参阅下面的链接)

  3. 使用PasswordVault
  4. var vault = new Windows.Security.Credentials.PasswordVault(); var credentials = vault.RetrieveAll(); foreach (PasswordCredential credential in credentials) { Console.WriteLine("{0} {1}", credential.Resource, credential.UserName); }

    资料来源:http://blogs.softfluent.com/post/2014/03/27/Acceder-a-API-WinRT-depuis-une-application-Desktop.aspx(法文)

    获取Windows和通用凭据:Encrypting credentials in a WPF application