Asp.net web api 在Web API中检查共享机密的最佳位置

Asp.net web api 在Web API中检查共享机密的最佳位置,asp.net-web-api,azure-web-app-service,azure-api-management,Asp.net Web Api,Azure Web App Service,Azure Api Management,我的Web Api是通过Azure Api管理门户公开的,我添加了一个策略来设置带有共享机密的HTTP头。通过这种方式,我希望阻止对我的api后端(托管在azure web app上的api)的访问。现在我想知道我应该在我的webapi中添加自定义逻辑,以检查共享机密?应该是actionFilters吗?最简单的地方是使用消息处理程序。应该是这样的 public class RestrictClientHandler : DelegatingHandler { prot

我的Web Api是通过Azure Api管理门户公开的,我添加了一个策略来设置带有共享机密的HTTP头。通过这种方式,我希望阻止对我的api后端(托管在azure web app上的api)的访问。现在我想知道我应该在我的webapi中添加自定义逻辑,以检查共享机密?应该是actionFilters吗?

最简单的地方是使用消息处理程序。应该是这样的

 public class RestrictClientHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            IEnumerable<string> secrets = null;
            request.Headers.TryGetValues("myapi-secret",out secrets);
            var secret = secrets.FirstOrDefault();
            if (secret == null || secret != "the secret" )
            {
                return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Forbidden) { RequestMessage = request, Content=new StringContent("Direct access to this API is not allowed")});
            }
            return base.SendAsync(request, cancellationToken);
        }
    }
public类RestrictClientHandler:DelegatingHandler
{
受保护的覆盖任务SendAsync(HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
{
IEnumerable secrets=null;
request.Headers.TryGetValues(“myapi机密”,out机密);
var secret=secrets.FirstOrDefault();
if(secret==null | | secret!=“秘密”)
{
返回Task.FromResult(新的HttpResponseMessage(HttpStatusCode.Forbidden){RequestMessage=request,Content=new StringContent(“不允许直接访问此API”)});
}
返回base.sendaync(请求、取消令牌);
}
}

您可以通过将其添加到挂起配置对象的MessageHandlers集合来安装它。

最简单的地方是使用消息处理程序。应该是这样的

 public class RestrictClientHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            IEnumerable<string> secrets = null;
            request.Headers.TryGetValues("myapi-secret",out secrets);
            var secret = secrets.FirstOrDefault();
            if (secret == null || secret != "the secret" )
            {
                return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Forbidden) { RequestMessage = request, Content=new StringContent("Direct access to this API is not allowed")});
            }
            return base.SendAsync(request, cancellationToken);
        }
    }
public类RestrictClientHandler:DelegatingHandler
{
受保护的覆盖任务SendAsync(HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
{
IEnumerable secrets=null;
request.Headers.TryGetValues(“myapi机密”,out机密);
var secret=secrets.FirstOrDefault();
if(secret==null | | secret!=“秘密”)
{
返回Task.FromResult(新的HttpResponseMessage(HttpStatusCode.Forbidden){RequestMessage=request,Content=new StringContent(“不允许直接访问此API”)});
}
返回base.sendaync(请求、取消令牌);
}
}
您可以通过将其添加到挂起配置对象的MessageHandlers集合来安装它