Expand description
§Windows native credential store for the keyring crate
This module implements a credential store for the keyring crate that uses the Windows Credential Manager as its back end.
§Usage
To make this store the default for creation of keyring entries, execute this code:
keyring_core::set_default_store(windows_native_keyring_store::Store::new().unwrap())
§Mapping service and user values to credentials
Each entry in keyring is mapped to a generic credential in the Windows Credential Manager.
The identifier for each credential in Windows is a target_name
string. If an entry is created with
an explicit target
modifier, that value is used as the target_name
.
Otherwise, a target_name
string is generated by concatenating a prefix string, the user
,
a delimiter string, the service
, and a suffix string. The prefix, delimiter, and suffix strings
are part of the store configuration. Their default values are: empty strings for the prefix and suffix,
and a ‘.’ for the delimiter.
Note that service and user strings, by default, can contain the delimiter string, so it is possible for entries with different service and user strings to map to the same description (and thus the same credential in the store). If you are worried about this, you can avoid it by configuring your store to forbid the delimiter string in the service string.
§Attributes
There are three string attributes that are held on each Windows generic credential:
target_alias
, username
, and comment
. The username
attribute will be set
from the user
specifier when an entry is created.
All three attributes can be read and set using the
[get_attributes](keyring_core::Entry::get_attributes] and
update_attributes methods.
§Warning
Tests show that operating on the same entry from different threads
does not reliably sequence the operations in the same order they
are initiated. (For example, setting a password on one thread and
then immediately spawning another to get the password returns a
NoEntry
error on the spawned thread.) So be careful not to
access the same entry on multiple threads simultaneously.
Re-exports§
pub use store::Store;