- - PR -
c# negotiatestreamを利用したremoting
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-08-13 21:26
C#2.0でnegotiatestreamを利用したremotingの認証をおこなおうと考えています。
サーバーでの認証の際にwindows認証ではなく、他の認証を行う (たとえばユーザー名とパスワードを書いたファイルに基づいた認証)ことは可能でしょうか? sslstreamもsspiを利用して認証しているとあるので原理的にはできそうなのですが・・・ |
|
投稿日時: 2006-08-14 16:05
こんにちは。
たとえば System.Net.Security.NegotiateStream.AuthenticateAsServer メソッド のオーバーロード には System.Net.NetworkCredential クラス(オブジェクト) を引数にとるものがあります。 これで認証情報をやりくり出来そうですが、いかがでしょうか。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 |
|
投稿日時: 2006-08-15 20:58
返信ありがとうございます。
テストコードを書いてみました。 サーバ側にはユーザー名hoge パスワード123のcredentialを渡しています。 クライアント、サーバー側ともhogeでないログオンユーザーで走らせています。 ------------------------------------------------------------------------------ クライアント TcpClient client = new TcpClient(); client.Connect("localhost", 4243); NegotiateStream st = new NegotiateStream(client.GetStream()); st.AuthenticateAsClient(CredentialCache.DefaultNetworkCredentials, String.Empty, ProtectionLevel.None, TokenImpersonationLevel.Impersonation); ------------------------------------------------------------------------------- サーバー TcpListener listener = new TcpListener(4243); listener.Start(); TcpClient client = listener.AcceptTcpClient(); NegotiateStream st = new NegotiateStream(client.GetStream()); //ユーザーhoge、パスワード123のcredential NetworkCredential cred = new NetworkCredential("hoge", "123"); st.AuthenticateAsServer(cred, ProtectionLevel.None, TokenImpersonationLevel.Impersonation); Console.WriteLine(st.IsAuthenticated); Console.WriteLine(st.RemoteIdentity.Name); ------------------------------------------------------------------------ 結果 true (コンピューター名)\\(ログオン中のユーザー名) hogeでないユーザーでも承認されるのでサーバー側のcredentialは相互認証につかわれるのではないかと考えています。(サーバーでの認証はwindows認証が使われる) ここでサーバーでの認証に使用するcredentialを指定できればいいのですが・・・ あとサーバーがxp homeの場合クライアント側のcredentialで存在するユーザー名、パスワードを指定してもguestになってしまうのはforceguestが常にonになっているからでしょうか? |
1