RESTful WCF 服务安全性
Posted
技术标签:
【中文标题】RESTful WCF 服务安全性【英文标题】:RESTful WCF service security 【发布时间】:2012-02-13 20:38:47 【问题描述】:我们如何验证/授权 WCF RESTful 服务(使用 webHttpBinding(而不是 wsHttpBinding,如 SOAP 案例))? IE。我们想使用 Membership/Roles 来允许(或禁止)用户根据其角色使用每个 Web 方法。
提前致谢。 宜兰。
【问题讨论】:
@simchona SOAP - 简单对象访问协议 您能否发布一些配置文件以了解您的 REST 服务是如何实现的?是通过 Restful API 还是使用 webHttpBinding 定义的端点? 【参考方案1】:您可以使用证书来保护服务或在标头中发送用户名和密码。然后,您可以通过在服务中实现IAuthorizationPolicy
来添加行为,这样您就不必在您公开的每个 Web 服务方法中实现安全检查。
public class CertificateAuthorizationPolicy : IAuthorizationPolicy
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
IIdentity identity;
object untypedIdentities;
if (!evaluationContext.Properties.TryGetValue("Identities", out untypedIdentities))
identity = null;
return false;
var identities = (IEnumerable<IIdentity>)untypedIdentities;
identity = identities.Where(item => item.AuthenticationType == "X509").FirstOrDefault();
var claimSet = (X509CertificateClaimSet)evaluationContext.ClaimSets[0];
var certificate = claimSet.X509Certificate;
在 web.config 中告诉服务使用授权策略
<behavior name="CertificateSecurityServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="CertificateAuthorizationPolicy, MyAssembly.Security" />
</authorizationPolicies>
</serviceAuthorization>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
另一种选择是在 IIS 服务器上设置 SSL,以便它需要 SSL 和客户端证书才能连接到任何页面。
【讨论】:
非常有趣.. 我们已经购买并安装了 VeriSign 证书 - 使用 https 而不是 http。对于 IOperationBehavior,我可以将它与 webHttpBinding 一起使用吗?你能指点我一些代码sn-p吗?谢谢。 我添加了一个带有实现示例的链接 很棒的文章,谢谢。但是我们仍然不知道如何使用您提出的 IOperationBehavior 来允许/禁止使用 Microsoft 成员资格/角色提供程序访问 Web 方法。 我已经更新了实现。我的记忆有点失败,安全检查是通过使用 IAuthorizationPolicy 接口设置的以上是关于RESTful WCF 服务安全性的主要内容,如果未能解决你的问题,请参考以下文章
使用 transportCredentialOnly 安全性对 RESTful WCF 服务的跨域 Ajax JSON POST 支持
用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置