在 .NET 中使用可以漫游的 Web 凭据

Windows 凭据管理器是一个内置在 Windows 操作系统中的功能,为用户提供一种安全的方式来存储和管理凭据。本文主要介绍如何在 .NET 中使用可以漫游的 Web 凭据,以及使用中的基本事项。

1. 引言

在前面的文章《试用 Windows Terminal 中的 Terminal Chat 功能》中,我们曾提到为了保证配置的安全,Azure Openai 的配置信息被存储在凭据管理器中,类别为Web 凭据。今天我们就聊一聊如何在 .NET 中如何使用凭据管理器,本文将主要讲述 Web 凭据的使用。

2. 凭据管理器

通过 Windows 凭据管理器,用户可以存储和管理凭据,这些凭据可以是用户名和密码、证书或其他凭据。我们可以看到凭据管理器中有两个类别:Windows 凭据和 Web 凭据。

2.1 Windows 凭据

Windows 凭据管理器的一个特殊功能是它可以安全地存储用户的凭据。这意味着用户的用户名和密码都被加密存储,以防止未经授权的访问。此外,凭据管理器还可以备份和恢复用户的凭据,这对于防止凭据丢失非常有用。

请添加图片描述

凭据管理器解决的主要问题是提供了一种简单而安全的方式来管理用户的凭据。用户无需记住所有的用户名和密码,只需要将它们保存在凭据管理器中,然后在需要时,Windows 就会自动提供这些凭据。这大大简化了用户的工作,同时也提高了安全性。

2.2 Web 凭据

Web 凭据是一种特殊类型的凭据,它们用于存储与 Web 网站和应用程序相关登录信息的凭据。Web 凭据的一个特殊之处在于,它不像 Windows 凭据那样可以自行添加和编辑。相反,Web 凭据是由浏览器和应用程序自动创建和管理的。

请添加图片描述

但是 Web 凭据却有一个非常棒的地方,那就是它们可以在不同的设备之间同步。这意味着用户可以在一个设备上创建一个 Web 凭据,然后在另一个设备上使用它。这对于那些经常在不同设备上工作的用户来说非常有用。

3. UWP 应用中使用

在 UWP 中使用凭据管理器非常简单,只需要使用 PasswordVault 类即可。PasswordVault 类提供了一组方法,用于添加、删除和检索凭据。下面我们就来看一下如何使用 PasswordVault 类。以下只是基本的使用方法,更多的使用方法可以参考官方文档。

添加凭据

添加凭据非常简单,只需要调用 PasswordVault 类的 Add 方法即可。Add 方法接收一个 PasswordCredential 对象作为参数,PasswordCredential 对象包含了凭据的详细信息,包括用户名、密码和备注等。

var vault = new PasswordVault();
vault.Add(new PasswordCredential("WebResource", "UserName", "Password"));

删除凭据

删除凭据也非常简单,只需要调用 Remove 方法即可。Remove 方法接收一个 PasswordCredential 对象作为参数,我们可以通过 Retrieve 方法来检索。

var vault = new PasswordVault();
vault.Remove(vault.Retrieve("WebResource", "UserName"));

当然也可以自己创建一个 PasswordCredential 对象。

var vault = new PasswordVault();
var credential = new PasswordCredential()
{Resource = "WebResource",UserName = "UserName",
};
vault.Remove(credential);

检索凭据

检索凭据前面删除凭据中已经提到了,这里就不再赘述了。获取到 PasswordCredential 对象后,我们可以通过 Password 属性来获取密码。

var vault = new PasswordVault();
var password = vault.Retrieve("WebResource", "UserName").Password;
var dialog = new ContentDialog()
{Title = "Password",Content = password,PrimaryButtonText = "OK",
};
await dialog.ShowAsync();

4. WinForm 和 WPF 中使用

在 WinForm App 和 WPF APP 中使用也是非常简单,同样是需要使用 SWindows.Security.Credentials 命名空间中。但是在 WinForm 和 WPF 中,我们在使用 .NET 5 及以上,比如当前的 .NET 8 创建好项目后,需要调整一下项目的目标框架。改为通过项目的 TargetFramework 属性指定要访问的 Windows API 版本。 例如:

<TargetFramework>net8.0-windows10.0.17763.0</TargetFramework>

其他就没有什么区别了,按照之前的使用方法即可。

5. 在 .Net Framework 中使用

新的 WinForm 形式其实也挺好用的,可以使用最新的 .NET 8 进行开发。非要用 .Net Framework 也不是不行,它也能使用 Window 凭据管理器,但要通过使用 P/Invoke 来调用 Windows API。不过,目前还没有找到使用 web 凭据的方法。

P/Invoke 是可用于从托管代码访问非托管库中的结构、回调和函数的一种技术。 大多数 P/Invoke API 包含在以下两个命名空间中:System 和 System.Runtime.InteropServices。 使用这两个命名空间可提供用于描述如何与本机组件通信的工具。关于 P/Invoke 的更多信息可以参考官方文档。

这里不再赘述 P/Invoke 的使用,感兴趣的话可以通过相关的Win32 API 文档 ,来实现在 .Net Framework 中使用 Windows 凭据管理器。

6. 特别注意

在 Windows 平台使用凭据管理器虽然方便,但是也有一个需要特别注意的地方:凭据的安全性。

6.1 不同使用方式的区别

UWP 应用中,拥有天然优势,可以直接使用 PasswordVault 类,并且凭据显示有保存者的信息。这样,就可以防止其他应用获取到凭据。

如下图所示:这里面有两个凭据,虽然他们的ResourceUserName属性都一直,但是一个是显示了保存者为“CredentialsTest”应用,另一个是没有保存者的。

请添加图片描述

也就是说,只有保存者为“CredentialsTest”应用的才能获取到凭据。其他应用是无法获取到凭据的。

而对于 WinForm 和 WPF 应用,虽然也可以使用,但是这种方式就没有保存者的信息。没有保存着信息的凭据,就相当于是大家公用的,可以被其他应用获取到凭据内容,并随意进行删除和修改,这样就会存在安全隐患。

6.2 确保安全性

如果你是通过桌面应用来使用凭据管理器,那么需要注意凭据的安全性。因为桌面应用是可以被其他应用获取到的。

为了防止恶意应用获取到凭据,当然首先还是建议,能选 UWP 就选 UWP,毕竟 UWP 应用的安全性更高。

另外,也可以将凭据进行加密,然后再保存到凭据管理器中。这样即使被获取到,也无法直接使用。当然,这样也会带来一些不便,比如每次使用凭据时都需要解密,然后再使用。

当然,如果只是使用其漫游和便捷的特性存储一些不重要的凭据,那么也可以不用考虑安全性问题。

7. 总结

本文主要介绍了如何在.NET环境下访问和使用Windows的凭据管理器,包括在UWP和桌面应用中的使用方法。我们还讨论了凭据管理器的安全性问题,以及在使用过程中需要注意的事项。如果你在实践中遇到任何问题,或者有任何疑问,欢迎留言,我会尽快回复你。如果你觉得这篇文章对你有帮助,也欢迎分享给你的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA时序分析与时序约束(四)——时序例外约束

目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约…

线性代数基础【4】线性方程组

第四章 线性方程组 一、线性方程组的基本概念与表达形式 二、线性方程组解的基本定理 定理1 设A为mXn矩阵,则 (1)齐次线性方程组AX0 只有零解的充分必要条件是r(A)n; (2)齐次线性方程组AX0 有非零解(或有无数个解)的充分必要条件是r(A)&#xff1c;n 推论1 设A为n阶矩阵,则…

GPT2 GPT3

what is prompt 综述1.Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing(五星好评) 综述2. Paradigm Shift in Natural Language Processing(四星推荐) 综述3. Pre-Trained Models: Past, Present and Future Pro…

网络安全的威胁PPT

建议的PPT免费模板网站&#xff1a;http://www.51pptmoban.com/ppt/ 此PPT模板下载地址&#xff1a;https://file.51pptmoban.com/d/file/2023/03/20/1ae84aa8a9b666d2103f19be20249b38.zip 内容截图&#xff1a;

Linux命令之服务器的网络配置hostname,sysctl,ifconfig,service,ifdown,ifup,route,ping的使用

1、查看当前主机名称&#xff0c;编辑配置文件修改主机名为你姓名拼音的首字母&#xff08;如张三&#xff0c;则为zs&#xff09; 2、查看本机网卡IP地址&#xff0c;编辑/etc/sysconfig/network-scripts/ifcfg-ens33&#xff0c;要求在一块物理网卡上绑定2个IP地址&#xff0…

Invalid bound statement (not found)(xml文件创建问题)

目录 解决方法&#xff1a; 这边大致讲一下我的经历&#xff0c;不想看的直接点目录去解决方法 今天照着老师视频学习&#xff0c;中间老师在使用动态SQL时&#xff0c;直接复制了一份&#xff0c;我想这么简单的一个&#xff0c;我直接从网上找内容创建一个好了&#xff0c;…

vue前端开发自学,借助KeepAlive标签保持组件的存活

vue前端开发自学,借助KeepAlive标签保持组件的存活&#xff01;如果不想让组件在切换的时候&#xff0c;被默认操作&#xff08;卸载掉了&#xff09;。他们需要使用这个这个表情哦。 下面给大家看看代码情况。 <template><h3>ComA</h3><p>{{ messag…

谷歌裁员千人,搅动硅谷!终身编程终结,我们何以苟活?

新年第一个月&#xff0c;硅谷爆发了新一轮裁员潮。在这波浪潮中&#xff0c;有消息称谷歌计划裁员千人&#xff0c;另有Meta、Unity、Discord等多家公司也陆续放出了裁员的消息。就当前的就业环境来说&#xff0c;技术人员似乎面临着极其严峻的考验。 过去的一年间&#xff0c…

Qt第二周周二作业

代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void paintEvent(…

【下云】旧笔记本实现私人服务器

背景&缘由&想法 背景&#xff1a; 自己是做Java的&#xff0c;做互联网或者说学计算机的都知道&#xff0c;近几年大环境太差&#xff0c;人却越来越多&#xff0c;造成行业越来越卷&#xff1b;针对Java来说&#xff0c;被迫要学习多方面的知识&#xff0c;工作拧螺…

第七在线荣获百灵奖 Buylink Awards 2023零售圈年度卓越服务商品牌

1月11日&#xff0c;由零售圈主办、20零售连锁协会协办、30零售行业媒体支持的中国零售圈大会暨2024未来零售跨年盛典在西安落下帷幕&#xff0c;在这个零售行业盛典中&#xff0c;第七在线凭借其高精尖产品和卓越的服务质量成功入选&#xff0c;并荣获了“百灵奖 Buylink Awar…

腾讯云优惠券怎样领取?附最新优惠券领取教程

腾讯云优惠券是腾讯云推出的一种优惠活动&#xff0c;通常包含代金券和折扣券两种形式&#xff0c;可以在购买腾讯云产品结算时抵扣部分费用或享受特定折扣&#xff0c;帮助用户降低购买腾讯云产品的成本。 一、腾讯云优惠券类型 1、代金券&#xff1a;代金券可以在购买腾讯云…

workflow源码解析:ThreadTask

1、使用程序&#xff0c;一个简单的加法运算程序 #include <iostream> #include <workflow/WFTaskFactory.h> #include <errno.h>// 直接定义thread_task三要素 // 一个典型的后端程序由三个部分组成&#xff0c;并且完全独立开发。即&#xff1a;程序协议算…

【.NET Core】C#预处理器指令

【.NET Core】C#预处理器指令 文章目录 【.NET Core】C#预处理器指令一、概述二、可为空上下文&#xff08;#nullable&#xff09;三、条件编译2.1 定义DEBUG是编译代码2.2 未定义MYTEST时&#xff0c;将编译以下代码 四、定义符号五、定义区域六、错误和警告信息 一、概述 预…

MySQL面试题 | 07.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

跟着cherno手搓游戏引擎【6】ImGui和ImGui事件

导入ImGui&#xff1a; 下载链接&#xff1a; GitHub - TheCherno/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C with minimal dependencies 新建文件夹&#xff0c;把下载好的文件放入对应路径&#xff1a; SRC下的premake5.lua文件&#…

k8s 存储卷和pvc,pv

存储卷---数据卷 容器内的目录和宿主机的目录进行挂载。 容器在系统上的生命周期是短暂的&#xff0c;deletek8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会回复到初始状态。 一旦回到初始状态&#xff0c;所有的后天编辑的文件的都会消失。 …

SpringBoot教程(十六) | SpringBoot集成swagger(全网最全)

SpringBoot教程(十六) | SpringBoot集成swagger&#xff08;全网最全&#xff09; 一. 接口文档概述 swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具&#xff0c;在前后端开发之前&#xff0c;后端要先出接口文档&#xff0c…

Mysql-redoLog

Redo Log redo log进行刷盘的效率要远高于数据页刷盘,具体表现如下 redo log体积小,只记录了哪一页修改的内容,因此体积小,刷盘快 redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快Redo log 格式 在MySQL的InnoDB存储引擎中,redo log(重做日志)被用…

C++ 输入用户名和密码 防止注入攻击

1、问题解释&#xff1a;注入攻击 &#xff0c;无密码直接登录数据库 可视化展示 1.1、当你的数据库为&#xff1a;其中包含三个字段id user 以及md5密码 1.2、在使用C堆数据库信息进行访问的时候&#xff0c;使用多条语句进行查询 string sql "select id from t_user…