0

各 wcf Web メソッドでロール認証をセットアップしようとしています。

たぶん私は何か間違ったことをしているのですが、許可を得ることができません。

サービスへのユーザー アクセスを承認する UserNamePasswordValidator があります。

次に、承認ポリシーがユーザー ロールを取得し、evaluationContext に対してプリンシパルを設定します。GenericPrincipal と独自の CustomPrincipal でこれを試しました。

ただし、ロールに関係なく、Web メソッドは常に実行されます。

AuthorizationPolicy

class AuthorizationPolicy : IAuthorizationPolicy {
        public bool Evaluate(EvaluationContext evaluationContext, ref object state) {         

            IIdentity client = GetClientIdentity(evaluationContext);

            string[] roles = new string[1];
            roles[0] = GetRoles(client);
            GenericPrincipal newPrincipal = new GenericPrincipal(client, roles);
            //CustomPrincipal newPrincipal = new CustomPrincipal(client, roles);
            evaluationContext.Properties["Principal"] = newPrincipal;                
            return true;
        }

        private IIdentity GetClientIdentity(EvaluationContext evaluationContext) {
            object obj;
            if (!evaluationContext.Properties.TryGetValue("Identities", out obj))
                throw new Exception("No Identity found");

            IList<IIdentity> identities = obj as IList<IIdentity>;
            if (identities == null || identities.Count <= 0)
                throw new Exception("No Identity found");

            return identities[0];
        }

PrincipalPermission はプリンシパルにどのようにリンクしますか?

[OperationContract]
        [WebInvoke(Method = "GET",
                    ResponseFormat = WebMessageFormat.Json,
                    UriTemplate = "/GetResults")]
        [PrincipalPermission(SecurityAction.Demand, Role = "User")]
        int? GetResults();

私の CustomPrincipal には IsInRole メソッドがあります。

4

1 に答える 1

3

わかりました、これで私の問題が見つかりました。少しばかげていますが、メソッドに対して配置する必要があるのに対し、インターフェイスに PrincipalPermssions を配置しました。

于 2014-05-29T15:40:09.730 に答える