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

news2024/11/17 6:53:33

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.coloradmin.cn/o/1385388.html

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

相关文章

SwiftUI CoreData Picker

开发多账本功能 CoreData 与 Picker 的使用 上代码&#xff1a; // // TestZhangBenPicker.swift // pandabill // // Created by 朱洪苇 on 2024/1/14. //import SwiftUIstruct TestZhangBenPicker: View {FetchRequest(sortDescriptors: [SortDescriptor(\.cc_at)],anima…

人工智能与六西格玛设计:一场颠覆性的融合之旅

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和六西格玛设计&#xff08;Six Sigma&#xff09;已成为当今企业追求卓越的关键工具。当这两大领域相遇&#xff0c;它们将引发一场创新与变革的狂潮。本文将探讨AI与六西格玛设计结合的潜力&#xff0c;以及…

MySQL 查看表结构简单命令

一、简单描述表结构&#xff0c;字段类型 desc tabl_name; # 表名 显示表结构&#xff0c;字段类型&#xff0c;主键&#xff0c;是否为空等属性。 二、查询表中列的注释信息 select * from information_schema.columns where table_schema db #表所在数据库 and table_n…

易基因:表观遗传学和表观转录组修饰在植物金属和准金属暴露中的作用 | 抗逆综述

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 非必需金属&#xff08;non-essential metal&#xff09;和准金属&#xff08;metalloid&#xff0c;也称类金属&#xff09;对土壤的污染是全球许多地区面临的严重问题。这些非必需金属…

java发送邮件(注:本章以163邮箱为例)

目录 前言 一邮件服务器与传输协议 二.发送邮件思路 2.1注册163邮箱: 2.2、打开邮箱服务获取授权码 三.代码实现邮件发送 3.1第三方jar包 3.2创建邮件工具类 3.3编写测试类 前言 电子邮件的应用非常广泛&#xff0c;例如在某网站注册了一个账户&#xff0c;自动发送一…

Vue报错 Cannot find module ‘../../modules/es6.symbol‘解决办法

在进行webpack打包的时候&#xff0c;会出现Cannot find module XXX’的错误&#xff0c;找不到某个模块的错误&#xff0c;今天给出解决方法&#xff1a; 直接进行npm install重新打包&#xff1b;如果npm install重新打包之后&#xff0c;仍然出现这个问题&#xff0c;可以进…

Springboot 整合阿里云安装的redis

今天购买了一台阿里云实例于是在上面装了一个redis,开始时一直连不上&#xff0c;一直报DENIED Redis is running in protected mode because protected mode is enabled 或者是无法连接的错误&#xff0c;于是检查配置redis.conf中&#xff1a;bind 屏蔽或者0.0.0.0 设置&…

Vue2-Vuex中State、Mutation及mapState辅助函数、mapMutations的基本用法

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 个人笔记&#xff0c;仅供参考。 state&#xff1a;全局共享的响应式数据 mutation:声明修改全局响应式数据…

FPGA 原理图细节--画引脚

BGA引脚表示 1.1 FPGA此引脚要正确和清晰&#xff0c;会在“Package Pin”中用到次物理接口 1.2, MCU 只用管对应的GPIO逻辑接口就可以了 标识Bank电平 标识出对应Bank的电平&#xff0c;在电路设计中可以清晰的知道对应的脚位输出电平。在"IO std"也方便的选择 Ea…

PPT插件-大珩助手-保留原素材的位置和大小一键替换

保留原素材的位置和大小一键替换 若勾选了一键替换&#xff0c;对于从素材库插入的图形&#xff0c;可以使得它的位置、大小与幻灯片中选中的形状一致 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持W…

Python 以相对/绝对路径的方式压缩文件

文章目录 1. tarfile 简单介绍2. tarfile 支持的模式3. 绝对路径压缩4. 相对路径压缩5. 参考 1. tarfile 简单介绍 Python 的 tarfile 模块提供了对 .tar 格式归档文件的全面支持&#xff0c;允许用户创建、读取、修改和写入 tar 归档文件。在实际应用中&#xff0c;tar 文件通…

vue-vben-admin 与.net core 结合实例 【自学与教学 小白教程】---第4节---部门管理

ue-vben-admin 与.net core 结合实例 这里计划使用.net core 作为后端 。目标&#xff1a;打造好看 易用 开箱即用 的netcore一体化框架。Vue Vben Admin For NetCore 取命 hcrain-vvadmin 我不是前端人员 但有时开发还是要写一些界面。 之前使用layui是时候 狠心升级下了。 …

TongLINKQ(2):TongLINKQ服务端安装

1 安装前的准备 明确应用&#xff08;JDK&#xff09;和TongLINK/Q的版本、位数&#xff08;要么都是32位&#xff0c;要么都是64位&#xff09;TLQ安装程序使用InstallAnywhere打包而成&#xff0c;因此需要JDK1.5及以上版本。 2 安装步骤 3 选择安装安装包 目前TongLINKQ的…

4. Mybatis 事务和Spring事务关系

大体上分为两种情况&#xff1a;方法上添加了事务注解Transactional 和方法上没有添加事务注解Transactional。 添加了Transactional 注解的在注入 bean 的时候就会被创建代理类&#xff0c;在代理类中使用增强逻辑进行事务处理。没有添加Transactional 注解的&#xff0c;在 …

文件模块常用api

文件模块常用api 文件夹常用操作 文件夹操作 fs.mkdir fs.rmdir 需要是空目录 题目&#xff1a;递归删除目录* 串行/并行删除文件*

肯尼斯·里科《C和指针》第6章 指针(4)实例

肯尼斯里科《C和指针》第6章 指针&#xff08;1&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;2&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;3&#xff09;-CSDN博客 6.12 实例 /* ** 计算一个字符串的长度。 */ #include <…

SSL证书怎么选?

首先&#xff0c;我们需要理解不同类型的SSL证书及其费用差异。通常情况下&#xff0c;SSL证书分为域名验证型&#xff08;DV&#xff09;、组织验证型&#xff08;OV&#xff09;和企业验证型&#xff08;EV&#xff09;三种。其中&#xff0c;DV证书是最常见的类型&#xff0…

入驻商城小程序系统源码:众多自定义组件以及营销插件随心搭,独立部署,带完整的搭建教程

现如今&#xff0c;互联网在不断的发展&#xff0c;小程序已成为电商行业的重要战场。入驻商城小程序系统源码正是基于这一背景&#xff0c;为用户提供了一套功能强大、易于定制的电商解决方案。该源码拥有众多自定义组件和营销插件&#xff0c;支持独立部署&#xff0c;并附带…

芯课堂 | 华芯微特MCU在PCB板级设计中对ISP引脚的应用

1.应用描述 ISP&#xff08;In System Programming&#xff09;&#xff0c;在系统编程&#xff0c;使用片内驻留出厂引导程序&#xff08;BootROM&#xff09;配合UART / SPI等外设进行烧录。 华芯微特全系MCU的ISP操作说明&#xff1a;当芯片上电后检测到 ISP 引脚持续 5ms…

聚甲基丙烯酸甲酯PMMA的特性有哪些?UV胶水能够粘接聚甲基丙烯酸甲酯PMMA吗?又有哪些优势呢?

聚甲基丙烯酸甲酯&#xff08;Polymethyl Methacrylate&#xff0c;PMMA&#xff09;&#xff0c;又称丙烯酸甲酯&#xff0c;是一种常见的透明塑料&#xff0c;具有许多特性&#xff0c;使其在各种应用领域中广泛使用。以下是PMMA的一些主要特性&#xff1a; 1. 优异的透明性&…