簡體   English   中英

如何將API訪問限制為僅對我的應用程序?

[英]How do I restrict API access to only my application?

我已經創建了一個api,並為某些操作實現了JWT。 我遵循了一些教程,並成功地阻止了對非GET端點的未經授權的請求。 但是,每個教程似乎都涵蓋了相同的概念:向用戶提出請求。 也就是說,我正在獲取他們的用戶名/密碼,請求一個令牌,驗證該令牌,然后執行操作。

問題是我不希望公眾能夠向api發出GET請求。 我也不想讓他們登錄到應用程序,因為這是沒有必要的。

我可能還會在網站上使用一些Ajax,但不確定是否會使事情復雜化。

我應該只使用“應用程序”用戶名/密碼發出每個請求嗎? 還是有一種標准的方法來限制對應用程序的api請求?

查看您的方案,我想您肯定要考慮IdentityServer。

這將使您跳過OAuth2背后的大多數復雜性。 我見過很多人提到OAuth2流程過高,但這是一個標准,如果您花一些時間來理解它,那么您會發現實際上並不那么困難。

您的情況如何運作?

由於您不關心用戶登錄,因此您想使用應用程序身份驗證。這意味着您將定義ClientID和ClientSecret組合,這將有助於識別一個應用程序。 如果您有多個應用程序,則只需創建更多組合。

您將向授權服務器發出初始請求,並在基本授權標頭中傳遞ClientID和CLientSecret。

您將獲得一個令牌,該令牌使您可以在定義的時間段內訪問資源。 這次,您使用承載授權標題來訪問資源,並使用從授權服務器收到的令牌。

基本上就是這樣。 Taiseer的博客是一個很好的資源。 我強烈推薦它,因為這個人是Microsoft MVP,並且在這個特定領域已經做了很多工作。

我有一篇使用Identity v3的較舊文章。 現在已經過時了,但是它確實詳細解釋了所有內容,因此您可能也想看看一下:

安德烈的文章

我建議您不要使用任何自定義安全系統,因為這些系統沒有經過嚴格的戰斗,也沒有在野外得到真正的證明。 暴露自己一個小錯誤很容易。

我們在這里談論的似乎是根據用戶的身份授權每個GET請求。

獲得用戶名和密碼,請求令牌並驗證令牌都是身份驗證 在我看來,您下一步要做的就是授權,它涵蓋了“用戶可以做什么”。

為了授權請求,您需要一種機制來識別每個用戶/每個用戶組可以做什么和不能做什么,並在單獨的GET端點處進行查詢,以確定是否應允許該用戶發出請求,以及是否允許該用戶返回請求。適當的403禁止響應。

在ASP.NET中,可以通過啟用CORS功能來阻止此類請求。 首先,您需要使用Nuget Manager安裝“ Microsoft.AspNet.WebApi.Cors”軟件包。 然后按照以下說明修改您的WebApiConfig文件。

public static class WebApiConfig  
{  
    public static void Register(HttpConfiguration config)  
    {  
        var cors = new EnableCorsAttribute("http://localhost:18479", "*", "*");  
        config.EnableCors(cors);  
        // Web API configuration and services  

        // Web API routes  
        config.MapHttpAttributeRoutes();  
        config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new {  
        id = RouteParameter.Optional });  
    }  
}  

您可以針對每個控制器啟用每個操作的cors。 以上示例將在全球范圍內啟用cors。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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