如何使用ASP.NET的Web API创建私有/受保护的API?

时间:2016-12-30 13:25:04

标签: asp.net .net asp.net-mvc api asp.net-web-api

我想使用ASP.NET WEB API创建API,这些API应该是私有的或受保护的。 使用API​​我计划制作Xamarin应用程序和MVC网站。 只有应用程序可以使用API​​,否则如果有人获得API,那么他/她可以使用API​​检索数据。我不是这么想的!

我该怎么办?我需要一些建议。

2 个答案:

答案 0 :(得分:0)

您可以使用API​​密钥身份验证机制保护您的API。这是一个很好的tutorial

答案 1 :(得分:0)

开始进入你的global.asax.cs文件并添加

GlobalConfiguration.Configuration.MessageHandlers.Add(new AuthHandler())

在项目中创建一个类AuthHandler,并使用DelegatingHandler创建该类接口:

public class AuthHandler: DelegatingHandler

在AuthHandler类中创建两个名为ValidateCredentials和SendAsync的方法。 SendAsync方法被覆盖。

private bool ValidateCredentials(AuthenticationHeaderValue authVal){}
protected override async Task<HttpResponseMessage> SendAsync(HttpResponseMessage request, CancellationToken cancelTok){}

当一个类或方法应用了Authorize过滤器时,将调用global.asax中的MessageHandler,它调用您创建的Auth处理程序,例如:

[Authorize] 
public class SomeController : ApiControler{}

剩下的是用户的实际身份验证。您需要获取标头值(由客户端应用程序放置),对其进行解码并根据您的数据库或您使用的任何内容进行检查。

private bool ValidateCredentials(AuthenticationHeaderValue authVal)
{
    try{
        string decodedHeader = new Classes.Strings().decode(authVal);
        this.user = // some query to check against database goes here
        return true;
    }
    catch{
        // some type of error control here
        return false
    }
}
 protected override async Task<HttpResponseMessage> SendAsync(HttpResponseMessage request, CancellationToken cancelTok)
{
    if(ValidateCredentials(request.Headers.Authorization))
    {
        // store user here to use around the api on this request
    }
}

因此,简而言之,HTTP需要存储您的身份验证标头值。在每个请求上使用该值来过滤您需要身份验证的任何类或函数。接下来,我会读取http标头,特别是Authentication标头值。