wcf - RESTful WCF 服务安全

标签 wcf web-services wcf-binding wcf-security restful-authentication

我们如何验证/授权 WCF RESTful 服务(使用 webHttpBinding(而不是 wsHttpBinding,如 SOAP 情况))? IE。我们希望使用成员身份/角色来允许(或禁止)用户根据其角色使用每个 Web 方法。

提前致谢。 宜兰。

最佳答案

您可以使用证书来保护服务或在 header 中发送用户名和密码。然后,您可以通过向服务实现 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 和客户端证书才能连接到任何页面。

关于wcf - RESTful WCF 服务安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921788/

相关文章:

wcf - 如何在一处声明 MVC 模型和 WCF DataContract?

c# - 如何实例化 ASP.net Web 服务的 SoapMessage?

javascript - 使用 Promise 链接 Web 服务调用并不总是有效

web-services - 如何在 JAX-WS 客户端中指定 ReplyTo EndpointReference?

wcf - 用于配置 WCF 的 web.config 和 app.config 文件的替代方案

web-services - 如何在 WCF 中的消息契约和数据契约之间做出决定?

c# - WCF 配置地址过滤器不匹配

WCF 调用另一个 WCF : Could not establish trust relationship for the SSL/TLS

silverlight - 使用 Silverlight/WCF 将大文件上传到数据库

c# - 单声道/WCF : Cannot determine caller IP on Ubuntu