5

カスタム UserNamePasswordValidator を使用してユーザーを検証する WCF サービスがあります。

public override void Validate(string userName, string password)
        {
            LoginHelper loginHelper = new LoginHelper();
            loginHelper.ValidateUserRegularLogin(userName, password);
        }

これが完了すると、IAuthorizationPolicy.Evaluate がトリガーされ、ここでプリンシパルを次のようなカスタム ユーザー コンテキストに設定します。

evaluationContext.Properties["Principal"] = userContext;

問題は、適切なユーザーコンテキストを取得するために2つのことが必要であり、これはユーザー名とヘッダーからの値であることです。

messageinspector を使用して、次のようなヘッダー データを取得できることを知っています。

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            IntegrationHeader integrationHeader;
            LoginHandler loginHandler;
            UserContextOnService userContext = null;

            if (request.Headers.Action == null || request.Headers.Action.ToString().Length < 1)
                return null;

            foreach (var header in request.Headers)
            {
                if (header.Namespace == "ns" && header.Name == "SecurityToken")
                {

                    return null;
                }
            }

            throw new SecurityTokenException("Unknown username or invalid password");
        }

しかし、適切なログイン (プリンシパルの設定) を行うことができるように、Evaluate メソッドでこの情報を取得する必要があります。出来ますか?もしそうなら、どのように?代替手段は何ですか?

PS。これは呼び出しによって行われるため、特定のログイン方法は使用できません。

解決済み:

私はこれで終わった:

integrationHeader = OperationContext.Current.IncomingMessageHeaders.GetHeader<IntegrationCertificateHeader>(header.Name, header.Namespace);
4

1 に答える 1

1

これでヘッダーデータにアクセスできますか?

WebOperationContext.Current.IncomingRequest.Headers 
于 2016-03-03T10:56:29.550 に答える