将MVC项目中的webapi 2控制器访问限制为仅托管的App Service的最佳方法是什么?
我创建了一个我的MVC客户端正在访问的端点。整个应用程序通过应用程序服务发布到azure。我现在如何保护端点不被应用于应用程序上下文之外?
答案 0 :(得分:1)
根据您的意见,您应该考虑重组您的解决方案。
对于身份验证,我会考虑实现一个授权服务器(再次在一个独立的项目中),向客户端发送令牌(在您的情况下是MVC应用程序),然后客户端将使用此令牌访问API。要实现auth服务器,您有几个选项
拥有专用的授权服务器可以清楚地区分身份责任,允许您控制其他未来客户端的访问权限,并可能限制只访问某些端点(也称范围)。
答案 1 :(得分:0)
您可以在请求的标头中使用API密钥来过滤掉不需要的请求。 1.实现客户授权属性(AuthorizationFilter)类。
[HttpPost, AuthorizationFilter]
public CustomerInfo GetCustomerInfo(CustomerInfoRequest request)
{
return Business.GetCustomerInfo(request);
}
2。在您的控制器类
中 public override void OnAuthorization(HttpActionContext ctx)
{
if (!VerifyHeaders(ctx))
{
ctx.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
base.OnAuthorization(ctx);
}
private bool VerifyHeaders(HttpActionContext ctx)
{
IEnumerable<string> values = new List<string>();
//Read the API key from the request header
ctx.Request.Headers.TryGetValues("ApiKey", out values);
var apiKey = values?.FirstOrDefault();
return CheckApiKey(apiKey);
}
private bool CheckApiKey(string apiKey)
{
//Verification is done here
return true;
}