C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/03/11 21:16
[ クライアントのアカウント情報を取得する ]
WCFでは、 ServiceSecurityContext クラス (System.ServiceModel)Current 静的プロパティから、現在のクライアントのアカウント情報を格納する ServiceSecurityContext オブジェクトが取得できます。
この ServiceSecurityContext オブジェクトの WindowsIdentity プロパティまたは PrimaryIdentity プロパティにて、クライアントのアカウント情報を取得できます。
しかし、バインディングの設定によってはクライアントのアカウント情報を取得できません。その場合、 ServiceSecurityContext.Current は null を返します。


[ WS-Security ]
WCFではWS-Securityを利用することができます。
WS-Securityによって、SOAPメッセージの完全性、秘匿性が確保されます。
WS-Securityを有効にしている場合、クライアントのアカウント情報を取得することもできます。

WsHttpBingindバインディングセットでは、デフォルトでWS-Securityが適用されます。BasicHttpBindingバインディングセットではWS-Securityを利用することができません。

WsHttpBindingバインディングセットでは、 [ wsHttpBinding ] - [ binding ] - [ security ] セクションの mode 属性に、 "Message" または "TransportWithMessageCredential" を指定すると、WS-Securityが適用されます。これ以外の値を指定した場合、WS-Securityは適用されません。デフォルト値は "Message" です。
なお、WS-Security を適用する場合、 [ wsHttpBinding ] - [ binding ] - [ security ] - [ message ] セクションの clientCredentialType 属性にて認証方式を指定することができます。この属性に指定できる値は HttpClientCredentialType 列挙体 (System.ServiceModel) の列挙値となります。デフォルト値は "Windows" です。この属性に "None" を指定した場合、クライアントは匿名アクセスを行います。 ( ServiceSecurityContext.Current は null になりません。 )

WS-Securityは、セキュリティの強化が行われる分、通信データ量は肥大化し、SOAPメッセージでやりとりされるデータの暗号化・復号化というコストの高い処理が発生します。
SOAPメッセージの完全性、秘匿性が要求されるような場合はWS-Securityを適用し、それ以外の場合で、特にパフォーマンスが要求されるような場合はWS-Securityは適用しない方がいいかと思います。


[ WS-Securityを適用せずにクライアントの認証情報を取得する ]
WS-Securityを適用せずにクライアントの認証情報を取得したい場合、 CustomBinding バインディングセットを使用し、 [ customBinding ] - [ binding ] - [ httpTransport ] セクションの authenticationScheme 属性にて適切な認証方式を設定します。更に、authenticationScheme属性で指定した認証方式に応じて、IISの認証方法も適切に設定する必要があります ( 匿名アクセスを不可に設定することも可能 ) 。
authenticationScheme 属性に指定できる値は、 AuthenticationSchemes 列挙体 (System.Net) の列挙値となります。デフォルト値は "Anonymous" です。
ただし、"IntegratedWindowsAuthentication" ( 統合Windows認証 ) や "None" を指定すると、「ファクトリは ExactlyOne 認証しかサポートしていません」とエラーになります。
統合Windows認証の代わりには、 "Negotiate" または "Ntlm" を指定します ( 通常は、Kerberos 認証とNTLM認証をサポートする "Negotiate" を指定しておけば問題ないと思います )  。
他にも、"Digest", "Basic", "Anonymous" を指定することができます。 "Anonymous" を指定した場合、クライアントは匿名認証を行います。 ( ServiceSecurityContext.Current は null になります。 )

WS-Security を適用せずに、Negotiate 認証を利用する場合の設定例を以下に示します。

<customBinding>
    <binding name="MyServiceBinding">
        <httpTransport authenticationScheme="Negotiate" />
    </binding>
</customBinding>

スポンサーサイト



タグ: .NET C# WCF 認証
2007/01/09 18:30
WCFをIISでホスティングする ( WCFによるWebサービス ) 場合、IISの認証設定で、匿名アクセスを許可する必要がある。認証はWCF自身で管理する。
WCFでは、Windows 認証の他、さまざまなオプションをサポートする。その他の組み込みオプションとしては、ユーザー名トークン、X.509 証明書、SAML トークン、および InfoCard があるが、カスタムな認証メカニズムを定義することも可能。
( Windows Communication Foundation との関連における ASP.NET Web サービスの今後 からの抜粋 )


以下、とりあえず判明していることのメモ

WSHttpBinding バインディングセットを適用している場合、ServiceSecurityContext クラス (System.ServiceModel)Current静的プロパティから現在のクライアントユーザーについてのServiceSecurityContextオブジェクトが取得できる。更に、そのServiceSecurityContextオブジェクトのWindowsIdentityプロパティにて、クライアントユーザーのWindowsユーザーアカウントを表すWindowsIdentityオブジェクトが取得できる。

ServiceSecurityContext currentServiceSecurityContext = ServiceSecurityContext.Current;
WindowsIdentity currentWindowsIdentity = currentServiceSecurityContext.WindowsIdentity;



BasicHttpBinding バインディングセットを適用している場合、ServiceSecurityContextクラスのCurrent静的プロパティはNullを返す。


認証関係は苦手です ><
というか、周りに詳しい人がいるから今までまともに勉強したことがないな。
一度、しっかり基礎から学ばなければ。。。


追記 ( 2007/03/11 )
こちらの記事で、もうちょいしっかりとまとめました。
タグ: .NET C# WCF 認証