我有一个服务,其中一些方法有PrincipalPermissionAttribute。如果校验失败,我想要请求身份验证。 例如:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public string GetData()
如果主叫用户是管理员,则服务应返回数据。 如果主叫用户不是管理员,则服务应该请求身份验证,如果失败,则服务应返回401响应。我怎么能这样做?
答案 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错误。