我正在设计和测试WCF服务并将它们公开为SOAP Web服务。
我的逻辑上划分了我的服务类。我有一个帐户服务。要访问帐户Web服务,您必须提供用户名和密码以及API令牌。我编写了一个自定义类,将UserNamePasswordValidator扩展到了关注身份验证和IDispatchMessageInspector以检查令牌。
我们希望在不对用户进行身份验证的情况下提供某些帐户检查的要求刚刚浮出水面。从逻辑上讲,这些操作应保留在帐户服务中。但是,服务行为被配置为需要用户名,密码并且有一个IServiceBehavior,它添加一个IDispatchMessageInspector来检查令牌的所有按摩。
我一直在通过Extending Dispatchers - Microsoft和WCF Extensibility - Carlos Figueira
审核所有不同的扩展点我似乎找到了一种只在操作级别应用安全性的方法。或者是一种配置服务的方法,因此某些功能需要安全性/令牌而其他功能则不需要。
我是WCF的新手,所以它可能很简单,但我还没找到。如果您知道一篇文章介绍如何以不同方式保护服务的不同部分,或者如果您知道如何,请向我提供一些信息。谢谢。
答案 0 :(得分:1)
如果您想在操作级别允许/拒绝权限,可以使用 PrincipalPermission 属性设置方法。
您可以这样使用:
[PrincipalPermission(SecurityAction.Demand,Authenticated=false)]
void NotAutenticationRequiredMethod()
[PrincipalPermission(SecurityAction.Demand,Authenticated=true)]
void AuthenticationRequiredMethod()
当你想要更“灵活”的东西时,你也可以使用角色,因此不需要重新编译:
[PrincipalPermission(SecurityAction.Demand, Role = "CustomRole")]
您可以在此处阅读更多内容:https://msdn.microsoft.com/en-us/library/ff649821.aspx
在方法级别,您还可以检查 OperationContext.Current.ServiceSecurityContext 对象,以验证请求是否来自经过身份验证的用户并做出决定。
请记住, SecurityContext 可以有不同的身份验证:
string primaryIdentity = OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name;
string windowsIdentity = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;
在此处阅读更多内容:https://sankarsan.wordpress.com/2010/07/25/identity-securitycallcontext-in-wcf/
希望它有所帮助。