3

WCF セキュリティにカスタムのユーザー名とパスワードの検証を使用しています。ここで、呼び出されたメソッドで後でアクセスできるように、リクエスト中にユーザー名を保存したいと思います。それ、どうやったら出来るの?

私の問題を説明するサンプルコード:

public class CustomUserValidator : UserNamePasswordValidator
{
    public override void Validate(string username, string password)
    {
        if (username == "aaa" && password == "bbb")
        {
            // store username where i can get it in method called later.
            return;
        }
        throw new SecurityTokenException("Unknown Username or Password");
    }
}

今呼び出されているメソッド:

public void WebServiceMethod()
{
    Database.User.Single(c => c.Username == /* username from above */);
}

BR
アンドレアス

4

2 に答える 2

3

通常、カスタムの「プリンシパル」を発行してこれを行います。これはIAuthorizationPolicy;を介して行われます。IIRC、ユーザー名は、評価コンテキスト パラメーターを介して認証ポリシーで使用できるようになります。WCF でのカスタム プリンシパルの一般的なチュートリアルはこちらEvaluateにありますが、評価コンテキストで着信ユーザー名を見つけるために少し実験する必要がある場合があります。特に、キーのいずれかが「要求」辞書である場合は、それを調べます。そして.Claims、評価コンテキストを見てください。発行者にユーザー名が含まれる「クレーム」が見つかるはずです。CustomUserValidator

しかし、私はあなたが以前の仕事で説明したことを正確に行いました - そしてIIRCは私の出発点として上記のページを使用してうまくいきました.

プリンシパルを発行すると、通常どおり、次の方法で利用できます。

string cn = Thread.CurrentPrincipal.Identity.Name;
于 2012-04-25T12:02:10.280 に答える