簡體   English   中英

單客戶端(消費者)的webapi安全性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM