我在基於web api的項目中使用基於OAuth令牌的身份驗證。如何解決這個安全漏洞在web api
如果用戶通過身份驗證,則會生成訪問令牌,如下所示。
{"access_token":"FFz_DC6zzEDD4mGOCk9172ijj3sGxCUWnk-tGanm9wGk76hMB8sHI8ImeWtdUKHHGNXv465ZSlbb-3fr_hr9DqUHc9Dm9OBI7XjJhdjdOpAGAGSFOpE0Y17LCEWTjCmEZotuf42Mpgl81ewoS7OlnH4b5w4PrtzJbIBpSAMoWObziL_U3mTkeFKvWrcWOfvlSCvhhBA9Dc3UTXv3HiHKWQk0T3-pvVy7ZuW2oac-IIuaq_GYaVkIZh7s9-YjX9KAL2Z9yfrPrVOQXZe_5OcNd7nS3tdT5odchEAiuWRYQ6t7Tfb2si4T6VdAe73OYefE0se1FeQsxbOiNaLyF8OwBqymEUzEG8tEHJ-cejVbhPw","token_type":"bearer","expires_in":1799,"as:client_id":"","user":"1","role":"1",".issued":"Thu, 16 Feb 2017 09:37:44 GMT",".expires":"Thu, 16 Feb 2017 10:07:44 GMT"}
下面是api方法之一。
[Authorize]
[HttpGet]
[Route("{userId}/{type}/")]
public IHttpResponse GetCustomerDetails(int userId, string type)
{
//my api stuff
}
我正在使用Postman進行測試api。當我通過參數
http://localhost:50684/api/customer/1/gold
--along the access token in token in header--
它返回所需的json。
但是,如果我使用相同的標記&傳遞客戶id = 2,它仍然允許訪問其他客戶(id = 2)。
http://localhost:50684/api/customer/2/gold
--Access token in header--
由於生成的訪問令牌對id = 1的用戶有效,因此它不應該允許訪問id = 2的用戶的資源。
如何防止此安全漏洞?
任何幫助/建議高度讚賞。
謝謝
它是因爲你沒有把你的'Tokens'保存在一個數據庫中,並把它分配給每個用戶。您必須將該令牌與唯一生成併發送到數據庫以進行安全維護的令牌進行比較。 – Valkyrie