皆さん、おはようございます。Icyfireです。
現在ではカード認証をActiveX化にしております。
ステップとしては、
①Htmlにボタンを押して、ActiveXのカード認証機能のOpenメソッドを呼び出す
※Openメソッドにカードリーダーの初期化処理を含まれている(PC/SC仕様)
②ユーザはカードをカードリーダーにかざす
③読み取ったIDをサーバに送って、認証する
④認証成功の場合、ユーザ情報をHTML画面に返す
認証失敗の場合は、画面のキャンセルボタンを押されるまで、繰り返し認証を続ける
上記のステップ①に、カードリーダー初期化処理時、MethodAccessExceptionが発生してしまいました。
関連コード:
---------------------------
private void GetUserInfo()
{
string strCardID = ListenPCSC();
.......
}
private string ListenPCSC()
{
........
var hander = establishContext();
......
}
IntPtr establishContext()
{
..........
uint ret = SCardEstablishContext(SCARD_SCOPE_USER, IntPtr.Zero,.....);
}
[DllImport("winscard.dll")]
public static extern unit SCardEstablishContext(uint dwScope, IntPtr pwReserved1, ... ...)
上記、SCardEstablishContext メソッドを呼び出そうとするとき、MethodAccessExceptionが発生。
エラー情報:
----------------------------------------------------------------------------------------------------
[Security Transparent メソッド 'ActiveX.CardAuthenticationForm.establishContext()'がメソッド
'ActiveX.CardAuthenticationForm.SCardEstablishCOntext(UInt32, IntPtr, IntPtr, IntPtr,...)'
を使用してネイティブコードを呼び出そうと失敗しました。ネイティブコードを呼び出すには、メソッドはセキュリティ上
情報またはセキュリティ上安全で重要でなければなりません。
-----------------------------------------------------------------------------------------------------
ActiveXの形で、Windwosシステム上のWinScard.dllへのアクセスが許可されないから、上記のエラーを発生してしまうと思い
プロジェクトの参照にWinScard.dllを追加しようとも追加できません。
「WinScard.dllへの参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください。」
MethodAccessExceptionを発生した原因はこれでしょうか、どなた様が助けて頂けないでしょうか