2015年8月6日木曜日

Web サービス参照時の認証プロキシ設定

世の中で非常に嫌われている認証プロキシですが、残念ながらこちらの事情とは関係なく導入されているところは多々あると思います。

そのよう環境で外部サービスを参照するようなアプリを作成しようとした場合、プロキシ認証を通らないために泣きそうになることがあります。

Windows 上で設定しているプロキシ設定を利用する場合は、web.config に

   1: <system.net>
   2:   <defaultProxy
   3:     useDefaultCredentials="true" >
   4:   </defaultProxy>
   5: </system.net>

と記載することでプロキシを利用するのですが、この設定では認証が必要なプロキシの場合に認証情報が渡せずにエラーとなってしまいます。

いろいろ調べたところ、認証プロキシを利用している場合には以下のようにコーディングを行うことで対応が可能でした。

   1: Dim wr = New WebService.ServiceClient()
   2: Dim bd =TryCast(wr.Endpoint.Binding, BasicHttpBinding)
   3:  
   4: '認証プロキシの設定
   5: bd.ProxyAddress = New Uri(string.Format("http://{0}:{1}", [Proxy Address], [Port No]))
   6: bd.UseDefaultWebProxy = False
   7: bd.Security.Mode = BasicHttpSecurityMode.Transport
   8: bd.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
   9: bd.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic
  10:  
  11: '認証プロキシの認証情報設定
  12: wr.ClientCredentials.UserName.UserName = [UserAccount]
  13: wr.ClientCredentials.UserName.Password = [Password] 

上記のようにバインディングに対して認証プロキシの情報を設定することで、サービス利用時の認証動作を行うことが可能です。

0 件のコメント:

コメントを投稿