WCF是否有类似于MVC的[Authorize]属性的等效功能?

11

我想使用属性来装饰特定的操作契约,以通过自定义逻辑授权调用者,类似于以下示例:

[ServiceBehavior]
public class Service1
{
    [OperationContract]
    [Authorize] // ?? this should make sure only admins can call this method
    public List<SampleItem> GetCollection()
    {
        return new List<SampleItem>() { new SampleItem("Only Admins see me") };
    }
}

[Authorize]应该检查调用者是否有权调用此操作;如果没有,则应返回错误故障。

谢谢。

3个回答

21

虽然不是开箱即用的,但WCF顶尖大师Juval Löwy在MSDN杂志上发表了一篇非常有趣的文章,讨论了声明式WCF安全性,与此类似。

Juval鉴别了几个关键的安全场景,并将它们包装成一个WCF服务行为,作为属性应用于您在服务器端的服务类上。确实是一篇非常有趣的阅读!


1
这不仅是一个好答案,而且你离10万非常接近,值得点赞。继续加油! - Maxim Zaslavsky
1
在这篇文章中,我介绍了我的声明式安全框架。 - 值得一读。 - Dmitry Sadakov
总的来说,对于你的问题,该文章基本上希望你使用以下代码:[PrincipalPermission(SecurityAction.Demand, Role = @"WindowsRole or CustomRoleName")] 此外,请参考以下链接:https://msdn.microsoft.com/zh-cn/library/ff647503.aspx - hidden
1
我无法在Windows 10 HTML帮助中阅读任何内容。通过按照以下步骤解决了这个问题:“[...] 在大多数Windows版本中,您必须首先将这些文件保存到本地计算机,然后解除文件的阻止以便阅读它。要解除文件的阻止,请右键单击该文件,选择属性,然后选择“解除阻止”按钮。然后就可以阅读内容了。” ——MSDN杂志问题 - bob esponja

3

WCF没有为此目的提供特殊的属性,但您可以使用PrincipalPermissionAttribute——.NET中声明性基于角色的安全性的常见方法。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接