私のアプリケーションは、ユーザー名/パスワードを受け入れて(Windowsサーバー上で)リモート共有を認証し、ファイルリストなどを取得していました.
public int ConnectNetResource(string server, string user, string password, ref string driveLeter) {
NETRESOURCE net = new NETRESOURCE();
net.dwScope = 0;
net.dwType = 0;
net.dwDisplayType = 0;
net.dwUsage = 0;
net.lpRemoteName = server;
net.lpLocalName = driveLeter;
net.lpProvider = null;
return WNetAddConnection2(ref net, password, user, 0);
}
ここで、SmartCard を使用して認証する必要があります。GetSmartCards のコードはありますが、証明書を使用して認証する方法がわかりません。
public static X509Certificate2 GetClientCertificate()
{
X509Certificate2 certificate = null;
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
// Nothing to do if no cert found.
if (store.Certificates != null && store.Certificates.Count > 0)
{
if (store.Certificates.Count == 1)
{
// Return the certificate present.
certificate = store.Certificates[0];
}
else
{
// Request the user to select a certificate
var certificates = X509Certificate2UI.SelectFromCollection(store.Certificates, "Digital Certificates", "Select a certificate from the following list:", X509SelectionFlag.SingleSelection);
// Check if one has been returned
if (certificates != null && certificates.Count > 0)
certificate = certificates[0];
}
}
}
finally
{
store.Close();
}
return certificate;
}
GetClientCertificate 関数は、ユーザーが選択した証明書を返します。この証明書を使用してリモート共有に接続するにはどうすればよいですか。どの API または .dll を使用できますか。
ところで、私は Windows エンジニアであり、コードをグーグルで検索して何とか機能させることができます。作業コードを高く評価します。ありがとうございました。