我试图在每个wcf web方法上设置角色授权。
也许我做错了什么,但我就是不能得到授权。
我有一个授权用户访问服务的UserNamePasswordValidator。
然后,授权策略获取用户角色,并针对evalutaionContext设置主体。我已经在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方法,我应该做其他的事情来确保PrincipalPermission验证角色吗?
发布于 2014-05-29 15:40:09
好吧,发现我的问题了。有点愚蠢,但我在接口上设置了PrincipalPermssions,而它们需要针对该方法。
https://stackoverflow.com/questions/23935978
复制相似问题