0

我正在尝试在每个 wcf Web 方法上设置角色授权。

也许我做错了什么,但我无法获得授权。

我有一个 UserNamePasswordValidator 授权用户访问该服务。

然后授权策略获取用户角色并根据评估上下文设置主体。我已经用 GenericPrincipal 和我自己的 CustomPrincipal 进行了尝试。

但是,无论角色如何,始终执行 Web 方法。

授权策略

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 方法,我应该做其他事情来确保 PrincipalPermission 验证角色吗?

4

1 回答 1

3

好的,发现我的问题。有点愚蠢,但我在接口上放置了 PrincipalPermssions,而它们需要针对该方法放置。

于 2014-05-29T15:40:09.730 回答