[英]webapi security for single client (consumer)
我正在嘗試搜索此問題,但運氣不佳。
這個想法是設計一個Web api,它最初只會被內部Web前端使用(例如,asp.net MVC應用程序)。 原因是我現在沒有太多時間花在使webapi安全上(可能將來應用程序將暴露於www)。
我嘗試過DotNetOpenAuth,但是它沒有好的文檔。
因此,問題是如何在沒有太多復雜的安全代碼的情況下保護Web api,以便它可以與我的ASP.NET MVC應用程序安全地通信?
還是這是完全錯誤的方法。 也許我應該一開始就保護我的webapi?
無論如何,有人知道如何實現這一目標嗎? 有文章或評論嗎?
謝謝
我將創建一個簡單的DelegatingHandler,它將在每個請求之前被調用
public class AuthorizationDelegatingHandler : DelegatingHandler
{
private const string API_KEY = "8139E7541722F5D91ED8FB15165F4"
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
if (request.Headers.Authorization == null)
return request.CreateResponse(HttpStatusCode.Unauthorized);
if (request.Headers.Authorization.Scheme != "Basic")
return request.CreateResponse(HttpStatusCode.Unauthorized);
var authToken = request.Headers.Authorization.Parameter;
var apiKey = Encoding.UTF8.GetString(Convert.FromBase64String(authToken))
.Split(':')
.FirstOrDefault(x => !string.IsNullOrWhiteSpace(x));
if (string.IsNullOrWhiteSpace(apiKey) || apiKey != API_KEY)
return request.CreateResponse(HttpStatusCode.Unauthorized);
return await base.SendAsync(request, cancellationToken);
}
}
我知道使用靜態令牌可能不是最好的方法,但是它應該可以使您有所了解。
在應用程序引導中,您將需要注冊此處理程序
GlobalFilters.Filters.Add(new AuthorizationDelegatingHandler());
然后,當您調用此API時,可以使用Basic
方案添加Authorization標頭。
每個沒有此標頭的請求都將返回未經授權的響應。
客戶端應通過以下方式調用API:
var client = new HttpClient
{
BaseAddress = new Uri(API_URL)
};
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes("8139E7541722F5D91ED8FB15165F4:")));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.