【REST】在 WCF RESTfull service 中实现自己的身份验证方式

关于如何创建 WCF RESTfull service,请移步 这里


大家应该都知道,在WCF 世界里, 类似配置一类的东西一般都有两种实现方式 --

1. 纯代码方式

2. 配置文件方式

本文也将要以这两种方式来呈现。

GO!


首先你要实现一个你自己的 ServiceAuthorizationManager

using System.ServiceModel;
using System.ServiceModel.Web;

public class RestAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        return CheckAccessCore(WebOperationContext.Current);
    }
}


在 CheckAccessCore 方法中就可以写你自己的验证逻辑了, 甚至可以设置本次请求的 status code

operation.OutgoingResponse.StatusCode =HttpStatusCode.Unauthorized;


接下来就是两种方式的不同之处了

1. 代码方式。

1) 需要额外实现一个自己的  WebServiceHostFactory.

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Activation;
using System.Web;

namespace WCFRestfulService
{
    public class SecureWebServiceHostFactory : WebServiceHostFactory
    {
        protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            var host = base.CreateServiceHost(serviceType, baseAddresses);
            host.Authorization.ServiceAuthorizationManager = new CertificationAuthorizationManager();
            return host;
        }

        public override System.ServiceModel.ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            var host = base.CreateServiceHost(constructorString, baseAddresses);
            host.Authorization.ServiceAuthorizationManager = new CertificationAuthorizationManager();
            return host;
        }
    }
}

2) 添加Route 并绑定自己的WebServiceHostFactory.(在Global.asax 文件中)

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.Add(new System.ServiceModel.Activation.ServiceRoute("RestService", new SecureWebServiceHostFactory(),
        typeof(RestService)));
}

2. 配置文件方式

添加一个service behavior

<behaviors>		
	<serviceBehaviors>
		<behavior name="RestServiceBehavior">
			<serviceMetadata httpsGetEnabled="true" />
			<serviceDebug includeExceptionDetailInFaults="true" />
			<serviceAuthorization 
				serviceAuthorizationManagerType="{your namespace}.RestAuthorizationManager,{your assemble name}
		</behavior>
	</serviceBehaviors>
</behaviors>

绑定此service behavior 到 service

<service behaviorConfiguration="RestServiceBehavior"

 .....


OK, Done.







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值