在 .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和桌面应用中的使用方法。我们还讨论了凭据管理器的安全性问题,以及在使用过程中需要注意的事项。如果你在实践中遇到任何问题,或者有任何疑问,欢迎留言,我会尽快回复你。如果你觉得这篇文章对你有帮助,也欢迎分享给你的朋友。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新婚恋交友系统,PHP书写,前端UNI,前后端源码交付,支持二开,APP小程序H5,三端都有!

如何开发婚恋交友的软件 1、实名认证&#xff1a;每个申请注册用户必须提交真实可信的个人身份信息内容&#xff0c;并且必须通过平台的核查&#xff0c;然后才能正常使用。 2、用户量大&#xff1a;该平台汇聚了来自全国各地的未婚男女。用户可以线上发送私人信息&#xff0…

十、Three场景实现多个物体的合并

Three场景实现多个物体的合并 目的 产品需求是让物体的光柱墙包含一个多边形的区域,二而我的多边形只能使用原型,方向,多边形。那么再研究的时候就需要将这些多边形合并成为一个形状,那么就行实现了。 原先的图形 如上图,是两个mesh组成的。首先寻找mesh合并的方法。 第…

Unity Meta Quest 一体机开发(十三):【手势追踪】自定义交互事件 EventWrapper

文章目录 &#x1f4d5;教程说明&#x1f4d5;交互事件概述&#x1f4d5;自定义交互逻辑⭐方法一&#xff1a;Inspector 面板赋值⭐方法二&#xff1a;纯代码处理 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量…

【XR806开发板试用】单总线协议驱动DHT11温湿度传感器

1.昨天刚收到极速社区寄来的全志XR806开发板&#xff0c;之前用过很多全志的SOC芯片&#xff0c;但是像这种无线芯片还是第一次用。这次打算使用XR806芯片驱动一下DHT11温湿度传感器。 2.代码如下&#xff1a; #include "common/framework/platform_init.h" #inclu…

四搭建dockerhub私有仓库

搭建dockerhub私有仓库 很多场景下&#xff0c;我们需使用私有仓库管理Docker镜像。相比Docker Hub&#xff0c;私有仓库有以下优势&#xff1a; 节省带宽&#xff0c;对于私有仓库中已有的镜像&#xff0c;无需从Docker Hub下载&#xff0c;只需从私有仓库中下载即可&#x…

浅学Linux之旅 day1 学习路线及计算机入门知识介绍

我不要做静等被掀起的轻波&#xff0c;我要生起翠绿的斑驳 偶尔过季的遭遭人事化长风拂过 思绪撕碎点燃了火 ——24.1.14 一、Linux学习路线 ①计算机入门知识介绍 ②Linux系统概述 ③Linux系统的安装和体验 ④Linux的网络配置和连接工具 ⑤Linux的目录结构 ⑥Linux的常用命令 …

【MATLAB】tvf_emd_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 TVF-EMD-LSTM神经网络时序预测算法是一种结合了变分模态分解&#xff08;Variational Mode Decomposition&#xff0c;VMD&#xff09;、经验模态分解&#xff08;Empirical Mode Decompo…

CANFD数据记录仪在新能源汽车复杂路测下的应用

汽车制造商在生产预批量阶段的耐久性测试中,为了检测潜在故障,必须让车辆在严酷的路况和环境下接受测试。为确保能回溯故障发生的现场情况,我们需要对测试数据精准记录与储存。这些数据是新车型优化迭代的关键,也是确保产品质量的重要依据。 在复杂路试环境中,数据记录面临多重…

有哪些品牌的超声波清洗机是值得入手的?超声波清洗机推荐

作为一个既对生活品质有追求&#xff0c;又只想躺平的懒人&#xff0c;一直在努力尝试让轻松的生活少一点绊脚石&#xff0c;而其中最重要的一个&#xff0c;就是清洗眼镜清洗日常生活的一些小物件&#xff0c;讲真&#xff0c;洗这些东西有时候就跟下班回家的KPI一样。白天不累…

【Python数据可视化】matplotlib之绘制三维图形:三维散点图、三维柱状图、三维曲面图

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

24V 30V 36V 48V转3.3V 5V12V降压恒压芯片H6212L

关于24V、30V、36V和48V转3.3V、5V、12V的降压恒压芯片&#xff0c;它们的工作原理主要涉及以下几个方面&#xff1a; 降压转换&#xff1a; 这些芯片通常采用开关电源的原理&#xff0c;通过高频开关来实现电压的降低。具体而言&#xff0c;输入电压高于输出电压时&#xff0…

定时器--JAVA

定时器是软件开发中的一个重要组件&#xff0c;类似于一个"闹钟"当达到一个设定的时间之后,就执行某个指定好的代码(任务)。 Timer JAVA标准库中已经为我们实现了一个定时器&#xff0c;我们直接new就行了。 Timer timer new Timer(); Timer类中最重要的一个方法…

docker-ce 安装与国内源配置 | Ubuntu 20.04

博客原文 文章目录 让apt可以支持HTTPS将官方Docker库的GPG公钥添加到系统中将Docker库添加到APT里更新包列表为了确保修改生效&#xff0c;让新的安装从Docker库里获取&#xff0c;而不是从Ubuntu自己的库里获取&#xff0c;执行&#xff1a;安装 docker-ce配置 docker 阿里源…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS 与 Stata、Python 的对比

《SPSS统计学基础与实证研究应用精解》1.5 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解1.5节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

【html+css+js】实例自习笔记–前端基础知识–溢出的文字省略号显示

【htmlcssjs】实例自习笔记–前端基础知识–溢出的文字省略号显示 【CSS面试题】溢出的文字省略号显示 问题的描述 单行文本溢出显示省略号 多行文本溢出显示省略号 为了达到上面这种省略号的效果&#xff0c;我们举一个栗子 1.单行文本溢出显示省略号–必须满足三个条件 先…

【搭建个人知识库-3】

搭建个人知识库-3 1 大模型开发范式1.1 RAG原理1.2 LangChain框架1.3 构建向量数据库1.4 构建知识库助手1.5 Web Demo部署 2 动手实践2.1 环境配置2.2 知识库搭建2.2.1 数据收集2.2.2 加载数据2.2.3 构建向量数据库 2.3 InternLM接入LangChain2.4 构建检索问答链1 加载向量数据…

Maven环境搭建及Maven部分目录分析

一、安装Maven Maven 本身就是⼀套由 Java 开发的软件&#xff0c;所以 Maven 的运⾏需要依赖 JDK 环境。在安装 Maven 之前请 确认JDK 是否配置正确&#xff08;主要依赖 JAVA_HOME 环境变量&#xff09;。如果没有正确安装和配置 JDK &#xff0c;则运⾏ Maven 时 会出现以下…

实战 | 某电商平台类目SKU数获取与可视化展示

一、项目背景 最近又及年底&#xff0c;各类分析与规划报告纷至沓来&#xff0c;于是接到了公司平台类目商品增长方向的分析需求&#xff0c;其中需要结合外部电商平台做对比。我选择了国内某电商平台作为比较对象&#xff0c;通过获取最细层级前台类目下的SKU数以及结构占比&…

大数据深度学习ResNet深度残差网络详解:网络结构解读与PyTorch实现教程

文章目录 大数据深度学习ResNet深度残差网络详解&#xff1a;网络结构解读与PyTorch实现教程一、深度残差网络&#xff08;Deep Residual Networks&#xff09;简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效&#xff1f; 二、深度学习与梯度消失问题梯度消失问题…

D20XB60-ASEMI开关电源桥堆D20XB60

编辑&#xff1a;ll D20XB60-ASEMI开关电源桥堆D20XB60 型号&#xff1a;D20XB60 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-5&#xff08;带康铜丝&#xff09; 平均正向整流电流&#xff08;Id&#xff09;&#xff1a;20A 最大反向击穿电压&#xff08;VRM&#xff…