2012-03-06 16 views
1

私は以下のようにカスタムMembershipProviderを持っています。 Active Directoryに対してユーザー名とパスワードを検証します。私はこれを「認証サービス」としたいと考えています。これは、クライアントがフォーム認証またはWindows認証を使用していても機能します。WCFを使用した認証サービス

従業員情報を提供するWCF「人事サービス」があります。 「HR UI」Webサイトでは、「HRサービス」WCFサービスが使用されています。 「HRサービス」を使用するクライアントは、「HRサービス」の操作にアクセスする前に、「認証サービス」を使用して認証する必要があります。クライアントアプリケーションが一度認証された場合は、次回以降は再度検証しないでください(アプリケーションが終了するまで)。クライアントアプリケーションの新しいインスタンスが開かれると、最初から認証される必要があります。

私たちはどのようにそれを達成するのですか?エンド・ツー・エンドのフロー・デモンストレーション用のコードサンプルはありますか?

注:自己ホストサービスを使用してテストできる必要があります。

注:クライアントは任意のプラットフォーム(Javaなど)でもかまいません。

namespace LijosCustomValidation 
{ 
public sealed class LijoMembershipProvider : MembershipProvider 
{ 

    public override bool ValidateUser(string username, string password) 
    { 
     bool isValid = true; 
//my logic to validate the user name and password 
     return isValid; 
    } 

    //other implementations of Abstract Methods from MembershipProvider 
    } 

答えて

4

認証が成功すると、認証サービスはトークンを返す必要があります。このトークンは、HRサービスに提示されます。

現時点でHRサービスの機能にはいくつかのオプションがあります。トークンを検証するための秘密を知るか、またはトークンを検証するために認証サービスを呼び出す必要があります。

トークンは、秘密を知っている場合に検証できる値である必要があります。そのため、対称的に暗号化されたユーザーIDなどが存在する可能性があります。理想的には、リプレイ攻撃を防ぐために時間コンポーネントが必要です。

は、私が最初にパイプの後にすべてのハッシュ値があるべき

<hash value>|<token issue time>|<user id> 

のようないくつかの何かハッシュ(SHA1、MD5など)をお勧めしたいです。結果をbase64でエンコードして渡すことができます。トークンを検証すると、問題の日付が特定の時間枠内にあるかどうかを確認できます。

トークンをクライアントにクッキーとして格納し、クッキーとしてサービスに渡すか、サービス上のパラメータにするかを選択することもできます。あなたのクライアントアーキテクチャ&に応じて、サービスをどのように構造化したいかによって、他のオプションがあるかもしれません。

+0

ありがとうサイモン。エンド・ツー・エンドのような実装の参照を私に与えることは可能でしょうか? – Lijo

+0

私はそのような実装を認識していないのではないかと心配しています。私の提案は、そのような課題に取り組んだ私の経験に基づいていました。 –

関連する問題