C# を使用して Windows 資格情報ストアから資格情報を取得する 質問する

C# を使用して Windows 資格情報ストアから資格情報を取得する 質問する

資格情報ストア(または金庫Windows 8で呼ばれているように)ログインデータを取得します。この場合、MSDNは本当に役に立ちませんし、C++も必要ありません。P/呼び出しアプローチ。

同様の質問がここで何度かされているのは知っていますが、私のケースではそれらの解決策はどれも機能しません。私は Metro アプリ プログラミングを使用していないので、そのようなものはPasswordVault(見たところ) 利用できません。私は単純な C# WPF デスクトップ アプリケーションを作成するだけです。

理想的には、複数の Windows バージョンで動作するはずですが、Windows 8 が推奨されます。

具体的には、Outlook 用の CRM プラグインから保存されたデータを照会して、ユーザーに資格情報を尋ねることなく、アプリケーションが CRM サーバーに自動的にログインするようにしたいと考えています。つまり、これが可能であれば...

では、Windows 資格情報ストアにアクセスするにはどうすればよいでしょうか?

ベストアンサー1

私が使用しているNuGetライブラリがあります。資格情報管理

使い方はとても簡単です。少しラップしましたが、おそらく必要なかったと思います。

public static class CredentialUtil
{
    public static UserPass GetCredential(string target)
    {
        var cm = new Credential {Target = target};
        if (!cm.Load())
        {
            return null;
        }

        // UserPass is just a class with two string properties for user and pass
        return new UserPass(cm.Username, cm.Password);
    }

    public static bool SetCredentials(
         string target, string username, string password, PersistanceType persistenceType)
    {
       return new Credential {Target = target,
                              Username = username,
                              Password = password,
                              PersistanceType =  persistenceType}.Save();
    }

    public static bool RemoveCredentials(string target)
    {
        return new Credential { Target = target }.Delete();
    }
}

使用例:

CredentialUtil.SetCredentials("FOO", "john", "1234", PersistanceType.LocalComputer);
var userpass = CredentialUtil.GetCredential("FOO");
Console.WriteLine($"User: {userpass.Username} Password: {userpass.Password}");
CredentialUtil.RemoveCredentials("FOO");
Debug.Assert(CredentialUtil.GetCredential("FOO") == null);

自分で実装することに興味がある場合は、ソースを参照してください。http://credentialmanagement.codeplex.com/SourceControl/latest

問題は、資格情報マネージャーに C# API がないことです。このライブラリは、他の .dll エントリ ポイントをうまくラップします。:-)

おすすめ記事