如何通过编程在Windows凭据管理器中添加Windows凭据而非通用凭据?
用CredentialManagement NuGet包设置指定类型的Windows凭据
我之前研究过用这个包操作Windows凭据存储的问题,你提到用它设置的凭据默认变成了Generic Credentials,这点确实是因为该包默认的凭据类型就是通用型。其实Windows凭据存储里主要有四类常用的凭据类型:
- Generic Credentials:通用型凭据,适用于大多数非域环境的自定义场景,也是CredentialManagement包的默认类型
- Domain Password Credentials:和Active Directory关联的域账户密码凭据,常用于域内服务认证
- Domain Certificate Credentials:基于证书的域凭据,依赖数字证书完成认证
- Domain Visible Password Credentials:可见的域密码凭据,一般用于兼容一些旧系统的认证需求
如果你想设置成非Generic的类型,只需要在创建Credential实例时指定Type属性即可,比如下面的代码示例:
using CredentialManagement; // 初始化凭据对象,指定目标标识、账户信息和类型 var credential = new Credential { Target = "YourDomainOrServiceTarget", // 域凭据的话这里可以填域名或服务标识 Username = "YourDomainUsername", Password = "YourSecurePassword", // 将类型设置为域密码凭据,替换成你需要的类型即可 Type = CredentialType.DomainPassword }; // 保存凭据到Windows凭据存储 if (!credential.Save()) { // 可以在这里处理保存失败的情况,比如输出错误信息 Console.WriteLine("凭据保存失败:" + credential.LastError); }
需要注意的是,设置域相关类型的凭据时,Target参数需要符合域环境的规则,比如填写正确的域名或者服务SPN(服务主体名称),否则可能会出现保存失败或者凭据归类不符合预期的情况。另外,CredentialType枚举里的选项完全对应Windows凭据管理API的类型定义,你可以根据实际需求选择合适的枚举值。
内容的提问来源于stack exchange,提问作者user1676874




