清除存储在通用 Windows 应用程序中的凭据
Clear Credentials stored in Universal Windows App
我在通用 Windows 平台 (UWP) 中使用 Windows.Web.Http.HttpClient
。 URL 需要域凭据 (NTLM),因此 windows 打开用户名和密码的自定义弹出窗口。应用程序需要注销功能,但我无法找到可以清除 UWP 存储的凭据的工作代码。
我尝试使用以下代码从 Windows.Security.Credentials.PasswordVault
中清除凭据,但没有成功:
var cred = new Windows.Security.Credentials.PasswordVault();
var pwds = cred.RetrieveAll();
foreach(var pwd in pwds)
{
pwd.RetrievePassword();
cred.Remove(pwd);
}
我也在清除以下 cookie:
var filter = new HttpBaseProtocolFilter();
var cookieManager = filter.CookieManager;
HttpCookieCollection cookies = cookieManager.GetCookies(uri);
foreach (HttpCookie u in cookies)
{
cookieManager.DeleteCookie(u);
}
有什么建议吗?
这在 Windows 10 中不可用,但会在周年更新中:
var filter = new HttpBaseProtocolFilter();
filter.ClearAuthenticationCache();
您可以在 the MSDN page 上看到更多信息,如果您拥有晚于 14295 的 Insider Preview 版本/SDK,您应该能够对其进行测试。
请看:
https://docs.microsoft.com/en-us/windows/uwp/security/credential-locker#deleting-user-credentials
描述了删除凭据的功能。
您正在使用的 public IReadOnlyList<PasswordCredential> RetrieveAll()
方法 return 似乎是一个只读集合。因此无法删除其值。
尝试访问凭据,例如public PasswordCredential Retrieve(String resource, String userName)
。 return 类型不是只读的,应该允许您使用删除方法。
如果您想删除特定资源名称的所有凭据,此解决方法甚至适用于较早的 Windows10 版本:
private void RemoveAllCredentials(PasswordVault passwordVault)
{
//Get all credentials.
List<PasswordCredential> passwordCredentials = new List<PasswordCredential>();
var credentials = passwordVault.RetrieveAll();
foreach (PasswordCredential credential in credentials)
{
if (credential.Resource.Equals("ResourceName"))
{
passwordCredentials.Add(
passwordVault.Retrieve(credential.Resource, credential.UserName));
}
}
foreach (PasswordCredential entry in passwordCredentials)
{
passwordVault.Remove(entry);
}
}
我在通用 Windows 平台 (UWP) 中使用 Windows.Web.Http.HttpClient
。 URL 需要域凭据 (NTLM),因此 windows 打开用户名和密码的自定义弹出窗口。应用程序需要注销功能,但我无法找到可以清除 UWP 存储的凭据的工作代码。
我尝试使用以下代码从 Windows.Security.Credentials.PasswordVault
中清除凭据,但没有成功:
var cred = new Windows.Security.Credentials.PasswordVault();
var pwds = cred.RetrieveAll();
foreach(var pwd in pwds)
{
pwd.RetrievePassword();
cred.Remove(pwd);
}
我也在清除以下 cookie:
var filter = new HttpBaseProtocolFilter();
var cookieManager = filter.CookieManager;
HttpCookieCollection cookies = cookieManager.GetCookies(uri);
foreach (HttpCookie u in cookies)
{
cookieManager.DeleteCookie(u);
}
有什么建议吗?
这在 Windows 10 中不可用,但会在周年更新中:
var filter = new HttpBaseProtocolFilter();
filter.ClearAuthenticationCache();
您可以在 the MSDN page 上看到更多信息,如果您拥有晚于 14295 的 Insider Preview 版本/SDK,您应该能够对其进行测试。
请看:
https://docs.microsoft.com/en-us/windows/uwp/security/credential-locker#deleting-user-credentials
描述了删除凭据的功能。
您正在使用的 public IReadOnlyList<PasswordCredential> RetrieveAll()
方法 return 似乎是一个只读集合。因此无法删除其值。
尝试访问凭据,例如public PasswordCredential Retrieve(String resource, String userName)
。 return 类型不是只读的,应该允许您使用删除方法。
如果您想删除特定资源名称的所有凭据,此解决方法甚至适用于较早的 Windows10 版本:
private void RemoveAllCredentials(PasswordVault passwordVault)
{
//Get all credentials.
List<PasswordCredential> passwordCredentials = new List<PasswordCredential>();
var credentials = passwordVault.RetrieveAll();
foreach (PasswordCredential credential in credentials)
{
if (credential.Resource.Equals("ResourceName"))
{
passwordCredentials.Add(
passwordVault.Retrieve(credential.Resource, credential.UserName));
}
}
foreach (PasswordCredential entry in passwordCredentials)
{
passwordVault.Remove(entry);
}
}