OutWit.Shared.Secrets.Provider.Windows
1.0.0
dotnet add package OutWit.Shared.Secrets.Provider.Windows --version 1.0.0
NuGet\Install-Package OutWit.Shared.Secrets.Provider.Windows -Version 1.0.0
<PackageReference Include="OutWit.Shared.Secrets.Provider.Windows" Version="1.0.0" />
<PackageVersion Include="OutWit.Shared.Secrets.Provider.Windows" Version="1.0.0" />
<PackageReference Include="OutWit.Shared.Secrets.Provider.Windows" />
paket add OutWit.Shared.Secrets.Provider.Windows --version 1.0.0
#r "nuget: OutWit.Shared.Secrets.Provider.Windows, 1.0.0"
#:package OutWit.Shared.Secrets.Provider.Windows@1.0.0
#addin nuget:?package=OutWit.Shared.Secrets.Provider.Windows&version=1.0.0
#tool nuget:?package=OutWit.Shared.Secrets.Provider.Windows&version=1.0.0
OutWit.Shared.Secrets.Provider.Windows
Windows Credential Manager provider for
OutWit.Shared.Secrets.Providers:
generic credentials via advapi32 (LibraryImport source generation —
NativeAOT-clean), CRED_PERSIST_LOCAL_MACHINE.
Where the secret actually lives
In the vault of the account the process runs as. CRED_PERSIST_LOCAL_MACHINE
does not mean "any user on this machine" — it means "this user, on this machine,
and do not roam". That is the containment: a service's credential is invisible
to every interactive user, and an interactive user's credential to every other
account. It also means the service account's entries do not appear in an
administrator's Credential Manager UI.
A support engineer looks in: Credential Manager → Windows Credentials →
Generic Credentials, under the target name {key}#{first 8 hex of SHA-256(key)}.
The suffix exists because Windows target names are case-insensitive while keys
are case-sensitive; SecretStoreWindows.MapKey(key) computes it.
Provisioning — read this before writing the installer
Whatever writes the credential at install time must do so as the account that will read it. An installer running elevated writes into the administrator's vault by default, and the resulting service cannot read its own credential; the symptom — "registration is refused on this one machine" — is very hard to read backwards. Impersonate the service account (or run as it), then verify with a read as that account before reporting success.
For a virtual service account (NT SERVICE\...) note that its profile — and
therefore its vault — is created lazily on first use. Prove the vault works for
your account on a real service before committing to it.
Use
services.AddSingleton<ISecretStore>(new SecretStoreWindows());
Uninstallers must DeleteAsync the keys they provisioned — an entry left behind
outlives the product and is still valid.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- OutWit.Shared.Secrets.Providers (>= 1.0.0)
-
net8.0
- OutWit.Shared.Secrets.Providers (>= 1.0.0)
-
net9.0
- OutWit.Shared.Secrets.Providers (>= 1.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OutWit.Shared.Secrets.Provider.Windows:
| Package | Downloads |
|---|---|
|
OutWit.Shared.Secrets.Desktop
The composite desktop package for OutWit.Shared.Secrets: references the Windows, macOS and Linux providers and exposes SecretStoreDesktop.ForCurrentPlatform(), so a cross-platform desktop application takes one reference and writes one line. Selecting among the operating-system providers by runtime platform is not silent degradation — on each desktop platform exactly one OS store is right, and all three protect the same way. Falling back to the File provider stays a deliberate, configured choice. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 133 | 8/31/2026 |