对PrincipalPermission的请求授权失败

时间:2016-02-29 01:26:15

标签: c# .net wcf

我有一个服务,其中一些方法有PrincipalPermissionAttribute。如果校验失败,我想要请求身份验证。 例如:

[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public string GetData()

如果主叫用户是管理员,则服务应返回数据。 如果主叫用户不是管理员,则服务应该请求身份验证,如果失败,则服务应返回401响应。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

好的,我已经设法用帮助类来做到这一点:

internal static class UserPermissions
{
    public static bool CheckRole(Role role)
    {
        try {
            var p = new PrincipalPermission(null, role.ToString());
            p.Demand();
        }
        catch (SecurityException) {
            return false;
        }
        return true;
    }

    public static void AssertRole(Role role)
    {
        if (!CheckRole(role)) {
            throw new WebFaultException(HttpStatusCode.Unauthorized);
        }
    }
}

public enum Role
{
    Administrator,
    Customer
}

有了这样的用法:

public class CustomerService : ICustomerService
{
        public List<Order> GetOrders()
        {
            UserPermissions.AssertRole(Role.Customer);
            // Code to get orders.
        }
}

所以,我放弃了ping-ponging身份验证请求的想法,而只是返回401错误。