2011-12-19 13 views
0

CRMのホストされたSilverlightアプリケーションにMS Dynamics SQLデータを提供するwcf Webサービスを構築しました。現在のところ、WebサービスはIISでホストされており、HTTPS経由でしか利用できないため、メッセージの内容は安全です。私は今、Silverlightクライアントアプリケーションに誰がログインしているのかと次のレベルのセキュリティを実装する準備が整いました。その情報をWebサービスに渡してから、SQL Server Connectionオブジェクトを作成するときに使用したいと思います。その結果、MS Dynamicsデータベースは、接続されたユーザーが表示権限を持つデータのみを返します。WCF Webサービスはユーザー名とパスワードの情報にアクセスする必要があります

このモデルは、Webサービスにアクセスするために特定のユーザーを認証する標準モデルとは異なります。代わりに、私のモデルでは、誰もがWebサービスへのアクセスを許可され、SQLクエリの結果は、特定のユーザーのユーザー名とパスワードに基づいています。

説明のために: Silverlightアプリケーションは、ユーザーがアプリケーションにログオンするときにユーザーからユーザー名とパスワードを収集します。これは、WebサービスがSQL Serverデータベースに接続するときに、最終的にWebサービスが使用する必要がある情報です。ですから、私の目標は、SilverlightアプリケーションがWebサービスにユーザー名とパスワードを渡して、Webサービスがそれを取得してConnectionオブジェクトを作成するときに使用できるようにすることです。

私は、各Webサービスリクエストにユーザー名とパスワードを追加するだけで簡単なことを考えています。しかし、私はむしろユーザーの資格情報を渡すための標準的な方法を使用することができるだろうが、私はパスワードに到達する方法を見つけることができないようです。ユーザー名には、OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Nameを使用してアクセスできます。

アイデア?

+0

どのユーザー名とパスワードを渡したいのかを明確にする必要があります。 CRMアカウントへのアクセスが制限されていませんか? Silverlightアプリケーションは、ドメインユーザーによってイントラネット内でアクセスされますか?あなたのサービスのドメインアカウントによってユーザーが認証されていますか? –

+0

明確にするために、Bob JonesがCRMにログインしています。 WebサービスでBob Jonesのユーザー名とパスワードが必要です。 Webサービスはクラウドでホストされ、ユーザー名とパスワードを使用して、別のサーバーにホストされているデータベースへの接続を作成します。現在、Webサービスはデフォルトのユーザー名とパスワードを使用してデータベースに接続しています。代わりにBob Jonesを使用します。 –

+0

Bob Jones Windowsアカウントはありますか? Btw。セキュリティー・メカニズムを構築しても、操作処理内でパスワードを取得することはありません。 SQL資格情報またはWindows資格情報を使用して接続を作成する必要がありますか? –

答えて

0

資格情報をサービスに渡すのにwsHttpBindingを使うことができますが、少なくともメッセージセキュリティで資格情報を送信する必要があります。これをIISの匿名認証と組み合わせることができます。このようにして、誰もがトランスポートレベルでサービスにアクセスできますが、資格情報を自分で処理することができます。

展開するには、HTTPSと匿名認証を使用してIISで実行されているWCFサービスがあります。

<behaviors> 
    <serviceBehaviors> 
    <behavior name="DefaultBehavior"> 
     <serviceCredentials> 
     <userNameAuthentication 
     userNamePasswordValidationMode="Custom" 
     customUserNamePasswordValidatorType="MyNamespace.CredentialValidator, MyNamespace"/> 
     </serviceCredentials> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
:私の行動で

<bindings> 
<wsHttpBinding> 
    <binding name="CredentialsBinding" /> 
     <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

、私はそうのように、カスタムのユーザー名/パスワードのバリデータのservicebehaviorを設定している:私のweb.configファイルでは、私はこのように、wsHttpBindingを設定しました

バリデータは次のようになります。

ロリー・プリムローズは、あなたはおそらくしているものについて説明し

namespace MyNamespace.CredentialValidator 
{ 
    public class CredentialValidator: UserNamePasswordValidator 
    { 
     public override void Validate(string userName, string password) 
     { 
      // you can now handle the username and password passed to your service 
      // with a wsHttpBinding through HTTPS 
     } 
    } 
} 

--edit彼の記事WCF Security: Getting the password of the userを探して、その後の使用のためにパスワードを取得するためにCustomUserNameSecurityTokenAuthenticatorを使用してください。

+0

方向性ありがとう - 例がありますか? –

+0

これまでに行った研究は、ユーザー名は利用可能だが、パスワードは隠し秘密であることを示しています。 –

+0

私はこれを認識していますが、私の解決策ではありません。私のWebサービスメソッドが呼び出される前に発生しています。 Webサービスメソッドの中に同じ情報が必要です。 –

関連する問題