go-keyring
go-keyring copied to clipboard
[Windows] Get, Set and Delete have unexpected and limiting behaviours
Hi,
I've found an issue while retrieving credentials set in the Windows Credential Manager by another application (not using go-keyring
).
Let's take this scenario, the main application sets a new credential to a specific service and username:
-
serviceName = service:name
-
username = $YOUR_USERNAME
When trying to call keyring.Get("service:name","$YOUR_USERNAME")
, the searched service name is created merging serviceName
and username
(searchedServiceName = service:name:$YOUR_USERNAME
), this behaviour is implemented in the function credName
.
This problem is the same also with keyring.Delete
and keyring.Set
.
Since changing this behavior would break every windows application using this library, I'd propose:
- add a "raw" counterpart to the public apis (
RawGet
,RawSet
andRawDelete
) that skips this behaviour on Windows (on other systems this would be a proxy to the original calls) - expose a new public api that can set/toggle a raw mode on Windows, but this will create problems with concurrent goroutines (on other systems that would be a
NOOP
)
I'm open to work on this as soon as a decision is taken. Thanks 😄
Just do understand your use case from a high level, do you want to be able to set a credential with another app and read it with an app using go-keyring? Can you elaborate on the use case you have in mind?
Yes, you got it right.
I need to access the credentials set by the main application (not using go-keyring
) with an external tool that uses go-keyring
.
Sadly, the behaviour described before makes it impossible.