我想使用ASP.NET WEB API
创建API,这些API应该是私有的或受保护的。
使用API我计划制作Xamarin应用程序和MVC网站。
只有应用程序可以使用API,否则如果有人获得API,那么他/她可以使用API检索数据。我不是这么想的!
我该怎么办?我需要一些建议。
答案 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标头值。