尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
UWP 凭据获取实战:Windows-universal-samples 中 CredentialPicker 的三种提示场景与完整选项配置
示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载本文基于 Windows-universal-samples 仓库中的 CredentialPicker 示例归档于 archived/CredentialPicker系统讲解如何通过Windows.Security.Credentials.UI.CredentialPicker类在 UWP 应用中弹出系统级凭据提示框并获取用户名、密码、域信息。示例覆盖三种由简到繁的调用形态纯消息提示、消息加标题提示、以及可自定义认证协议、保存复选框与显示行为的完整选项模式读完本文你将掌握pickAsync的全部重载方式、CredentialPickerOptions各字段的取值语义以及如何将取回的凭据用于后续需要认证的 API如 HttpClient为单点登录SSO场景提供支撑。示例定位为需要凭据的 API 提供 SSO 支撑本示例演示的核心能力非常聚焦使用Windows.Security.Credentials.UI.CredentialPicker类检索用户凭据并将其传递给可能需要凭据的 API例如 HttpClient。它的典型价值在于支持单点登录SSO——用户在一次凭据输入后应用可以将凭据复用于多个需要认证的服务调用。从仓库的归档结构看该示例目前保留了 JavaScriptWinJS实现核心代码位于 archived/CredentialPicker/js/js/ 下配套页面位于 archived/CredentialPicker/js/html/。示例允许用户启动不同类型的凭据提示共提供三种可选场景Message仅带提示消息的基础凭据对话框Message and Caption提示消息外加窗口标题Caption的对话框Message, Caption, Save Credential Option, and a type of protocol消息、标题、凭据保存复选框状态以及认证协议类型全部可配置的完整模式。这三种场景在 sample-configuration.js 中注册为SdkSample.scenarios分别对应scenario1.js、scenario2.js、scenario3.js三个页面脚本运行时可从应用导航栏依次切换体验。运行环境与工程配置原文档明确要求操作系统为Windows 10。从 Package.appxmanifest 可以看出工程面向Windows.Universal设备家族MinVersion为10.0.10240.0、MaxVersionTested为10.0.18362.0即覆盖 Windows 10 初版至今的通用设备范围。值得注意的是该清单的Capabilities节点为空说明弹出 CredentialPicker 对话框本身不需要声明任何特殊系统功能capability这是凭据获取类 API 的典型特征——UI 由系统托管应用只负责传参与接收结果。示例以default.html为启动页应用标识为Microsoft.SDKSamples.CredentialPicker.JS。工程文件 CredentialPicker.jsproj 与解决方案 CredentialPicker.sln 位于同一目录可直接用 Visual Studio 打开构建。构建示例原文档给出的构建流程如下适用于本仓库的完整下载解压场景若通过 ZIP 下载示例集合请务必解压整个归档而不仅是包含目标示例的单个文件夹因为示例共享同一套依赖启动 Microsoft Visual Studio 2017选择FileOpenProject/Solution在解压后的目录中进入Samples子文件夹再进入本示例对应的子文件夹最后进入所选语言C、C# 或 JavaScript的子文件夹双击其中的 Visual Studio 解决方案.sln文件按 CtrlShiftB或选择BuildBuild Solution完成构建。说明本仓库归档目录 archived/CredentialPicker 目前仅保留 JavaScript 实现构建时请使用js子目录下的CredentialPicker.sln。示例其余语言版本的对应代码可参考仓库中其他采用同主题 API 的示例目录。运行示例运行分为两种情况仅部署Deploy选择BuildDeploy Solution。部署并运行调试运行按 F5 或选择DebugStart Debugging免调试运行按 CtrlF5 或选择DebugStart Without Debugging。运行后应用首页会列出三个场景Message、Message Caption、Credential Picker Options点击任一场景的 Launch 按钮即可弹出对应的系统凭据对话框。场景一最简调用 pickAsync(targetName, message)场景一展示pickAsync的两参数重载。页面 scenario1.html 提供“Message”与“Target”两个输入框默认值分别为 Enter your credentials 与 contoso.com点击 Launch 后执行 scenario1.js 中的核心逻辑Windows.Security.Credentials.UI.CredentialPicker.pickAsync(targetName, message).then(function (results) { document.getElementById(OutputDomainName).value results.credentialDomainName; document.getElementById(OutputUserName).value results.credentialUserName; document.getElementById(OutputPassword).value results.credentialPassword; document.getElementById(OutputCredentialSaved).value results.credentialSaved ? Yes : No; document.getElementById(OutputCredentialSaveState).value (results.credentialSaveOption Windows.Security.Credentials.UI.CredentialSaveOption.hidden) ? Hidden : ((results.credentialSaveOption Windows.Security.Credentials.UI.CredentialSaveOption.selected) ? Selected : Unselected); WinJS.log WinJS.log(pickAsync status: results.errorCode, sample, status); });要点targetName是目标服务名示例中即 contoso.com 一类的资源标识会显示在对话框中并随凭据一并返回message是展示给用户的提示文本整个调用包在try/catch中同步异常如参数非法会通过WinJS.log输出错误信息两参数重载下对话框不会提供记住凭据复选框保存选项被隐藏。场景二三参数重载 pickAsync(targetName, message, caption)场景二在场景一基础上增加caption参数用于设置对话框窗口的标题栏文本。页面 scenario2.html 多了一个 Caption 输入框默认值 WindowCaption核心调用见 scenario2.jsWindows.Security.Credentials.UI.CredentialPicker.pickAsync(targetName, message, caption).then(function (results) { // 结果处理与场景一相同 // results.credentialDomainName / credentialUserName / credentialPassword // results.credentialSaved / credentialSaveOption / errorCode });两参数与三参数重载的区别仅在于是否指定窗口标题若不传caption系统使用默认标题传入后对话框标题与提示消息同时可控适合需要向用户交代为哪个服务输入凭据的场合。场景三使用 CredentialPickerOptions 的完整配置场景三是能力最完整的形态不再使用简化重载而是构造Windows.Security.Credentials.UI.CredentialPickerOptions实例逐一配置后调用pickAsync(options)。对应页面 scenario3.html 提供了消息、标题、目标、认证协议、自定义协议、保存复选框状态、是否始终显示对话框、是否由调用方保存凭据共八个输入项核心逻辑位于 scenario3.jsvar options new Windows.Security.Credentials.UI.CredentialPickerOptions(); options.message document.getElementById(InputMessage).value; options.caption document.getElementById(InputCaption).value; options.targetName document.getElementById(InputTarget).value; options.alwaysDisplayDialog document.getElementById(InputAlwaysShowUI).checked; options.callerSavesCredential document.getElementById(InputCallerSaves).checked; // 认证协议选择 switch (document.getElementById(InputProtocol).value) { case Negotiate: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.negotiate; break; case Kerberos: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.kerberos; break; case CredSsp: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.credSsp; break; case Basic: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.basic; break; case Digest: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.digest; break; case NTLM: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.ntlm; break; case Custom: options.authenticationProtocol Windows.Security.Credentials.UI.AuthenticationProtocol.custom; options.customAuthenticationProtocol document.getElementById(InputCustomProtocol).value; break; default: WinJS.log WinJS.log(Bad auth protocol specified: document.getElementById(InputProtocol).value, sample, error); break; } // 保存复选框状态 switch (document.getElementById(InputCheckboxState).value) { case Unselected: options.credentialSaveOption Windows.Security.Credentials.UI.CredentialSaveOption.unselected; break; case Selected: options.credentialSaveOption Windows.Security.Credentials.UI.CredentialSaveOption.selected; break; case Hidden: options.credentialSaveOption Windows.Security.Credentials.UI.CredentialSaveOption.hidden; break; default: WinJS.log WinJS.log(Bad save option specified: document.getElementById(InputCheckboxState).value, sample, error); break; } Windows.Security.Credentials.UI.CredentialPicker.pickAsync(options).then(function (results) { // 结果处理同上见场景一代码块 });CredentialPickerOptions 字段一览字段类型语义与取值messageString对话框提示消息示例默认 Enter your credentialscaptionString对话框标题示例默认 WindowCaptiontargetNameString目标服务名用于标识凭据归属示例默认 contoso.comauthenticationProtocol枚举认证协议取值见下表customAuthenticationProtocolString仅当协议为custom时生效指定自定义协议名称credentialSaveOption枚举保存凭据复选框的显示与勾选状态alwaysDisplayDialogBoolean为true时即使系统缓存中有可用凭据也强制弹出对话框callerSavesCredentialBoolean为true时由调用方负责保存凭据API 不再提示保存认证协议枚举AuthenticationProtocol从 scenario3.js 的 switch 分支可确认支持的协议与 UI 下拉框 scenario3.html 中的选项一一对应negotiateNegotiate默认综合协商kerberosKerberoscredSspCredSSP凭据安全支持提供程序basicBasic基本认证digestDigest摘要认证ntlmNTLMcustomCustom配合customAuthenticationProtocol指定具体协议字符串保存复选框状态CredentialSaveOptionunselected显示复选框但默认不勾选selected显示复选框且默认勾选hidden隐藏复选框此时对话框中不出现保存选项。结果对象pickAsync 返回了什么三个场景共用同一套结果字段处理逻辑完整字段包括字段类型说明credentialDomainNameString用户输入的域/域名部分credentialUserNameString用户名credentialPasswordString密码示例中直接回显到页面用于演示生产环境应避免明文展示credentialSavedBoolean凭据是否已被保存页面显示 Yes/NocredentialSaveOption枚举用户最终选择的保存选项状态映射为 Hidden / Selected / Unselected 展示errorCode数值异步操作状态码示例通过WinJS.log输出以便排查得到凭据后即可将其用于需要认证的 API如 HttpClient 的请求头构造实现一次输入、多处复用的 SSO 体验。源码结构速览scenario1.js两参数重载演示scenario2.js三参数重载演示scenario3.jsCredentialPickerOptions完整配置演示sample-configuration.js注册示例标题与三个场景的导航元数据scenario1.html、scenario2.html、scenario3.html三个场景的输入/输出 UIPackage.appxmanifest应用清单无特殊 capability 声明CredentialPicker.sln / CredentialPicker.jsproj解决方案与工程文件。使用建议与注意事项优先使用选项式调用当需要控制认证协议、保存行为或强制显示对话框时务必使用pickAsync(options)而非简化重载涉及 SSO 多服务复用时alwaysDisplayDialog false配合系统凭据缓存可减少重复输入。凭据安全示例将credentialPassword明文写入页面仅供演示真实应用应尽快使用后销毁避免日志与 UI 中残留明文密码。协议选择要与目标服务匹配Negotiate/Kerberos/NTLM 面向域环境Basic/Digest 面向 HTTP 基础认证场景CredSSP 多用于远程桌面类认证Custom 则用于私有认证方案。无 capability 负担如本示例清单所示调用 CredentialPicker 无需在 Package.appxmanifest 中声明额外权限集成成本低。赞分享示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载相关推荐UWP 文件选择器全场景实战Windows-universal-samples FilePicker 示例深度解析UWP 文件选择器全场景实战Windows universal samples FilePicker 示例深度解析 导读 本文基于 Windows unive示例工程Windows-universal-samples用 ActivitySensor 实现 UWP 活动检测的四种场景实战JavaScript 存档示例Windows universal samples用 ActivitySensor 实现 UWP 活动检测的四种场景实战JavaScript 存档示例 本示例工程Windows-universal-samples 实战UWP 高级投射Advanced Casting六场景完整指南Windows universal samples 实战UWP 高级投射Advanced Casting六场景完整指南 本文以 AdvancedCasti示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Lottery 抽奖系统实战:Docker 部署 XXL-JOB 分布式任务调度中心

Lottery 抽奖系统实战:Docker 部署 XXL-JOB 分布式任务调度中心

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

📅 2026/9/25 20:06:49
MySQLTuner 文档同步工作流实战:doc-sync 脚本与版本一致性审计全解析

MySQLTuner 文档同步工作流实战:doc-sync 脚本与版本一致性审计全解析

数据库运维 【免费下载链接】MySQLTuner-perl MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability. 项目地址: https://gitcode.com/gh_mirrors/my/My…

📅 2026/9/25 20:06:49
Kali ToolKit

Kali ToolKit

781 个 Kali 工具 2053 条命令,装进一个 20MB 的 exe:我开源了 Kali ToolKit hello大家好,我是Malcode,一个专注于网安以及开发的人。 用 Kali 的人都懂一个痛点:工具实在太多了。 Kali 官方收录了七百多个工具&#…

📅 2026/9/25 20:06:49
MORE NEWS

更多资讯

📰

从Activity Log生成周报:工作事件模型、聚合规则与事实边界

自动生成周报的可靠路径,不是让模型扫描所有聊天并自由总结,而是先建立轻量 Activity Log:用结构化工作事件记录结果、决定、阻塞、行动和来源,再按项目与时间聚合,最后由模型负责表达压缩。 工作事件模型 type WorkEv…

📰

「Python 翻车日记 · 第 12 篇」一行 read() 读 5GB,电脑就炸了?——文件是流,不是一坨

Python 翻车日记 第 12 篇:一行 read() 读 5GB,电脑就炸了?——文件是流,不是一坨 📋 本期菜单:6 个文件 I/O 的坑 + 1 个模式速查,从「read OOM」到「JSON 中文转义」 [入门] read OOM with 句柄泄漏 glob 不递归 二进制写 str [进阶] os.path.join 绝对路径丢弃 …

📰

K值新国标落地!2026选门窗不看这个参数,冬天多交一半暖气费

最近不少准备装修的朋友发现,去门店选窗户,销售都在提一个参数——K值。有的说是2.0,有的说是1.5,还有的说是1.1。这到底是个啥?新国标实施后,K值不达标会有什么后果?今天一篇讲清楚。K值到底是…

📰

Agent安全:权限控制与沙箱执行

Agent安全:权限控制与沙箱执行 专栏:AI/LLM工程化实战 - 从Prompt到Agent的完整落地指南 模块4 Agent工程实战篇 第42篇 摘要 摘要:Agent权限最小化、工具白名单、代码沙箱subprocess受限执行、敏感数据脱敏、审计日志,是Agent安全防护的五大核心手段。用可运行Python实现一道工…

📰

AI 辅助 Python 排错:从多出一个空页到回归测试

4 条数据,每页 2 条,分页函数却返回了 3 页,最后一页还是空的。 代码没有抛异常,接口也可能正常返回成功状态。直到调用方发现“下一页”里什么都没有,问题才暴露出来。 这类 Bug 很适合用来练习 AI 辅助排错&#x…

📰

Atlas 300V 24G推理卡实战:从零部署YOLOv5全流程

如果你最近在调研AI推理卡,大概率会刷到Atlas 300V 24G这个名字。上周还有朋友直接问我:这卡到底算不算运算加速卡,买回来能不能跑YOLO?我没有直接给结论,而是把工位上这块Atlas 300V Pro 24G从零到一部署YOLOv5的全过…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬