簡體   English   中英

使用RESTful服務保護跨域的API調用

[英]Securing API calls from cross domain using RESTful service

我有一個預訂網站,我向用戶提供幾行代碼,我在div添加了API密鑰以及代碼。 用戶需要在他們的網站中添加這些代碼。 然后我使用ajax調用從我的站點加載他們站點上的視圖。 我擔心的是:如何使用公共和私有API密鑰使用codeIgniter使用restful Web服務來保證這些調用的安全性?

我提供給用戶的代碼看起來像

    <link rel="stylesheet" type="text/css" href="http://localhost/bookingpoints_com/apiTesting/styles/first.css" />
    <script src="http://localhost/bookingpoints_com/contents/scripts/jquery.js" ></script>
    <script src="http://localhost/bookingpoints_com/contents/scripts/apiused.js" ></script>
    <script src="http://localhost/bookingpoints_com/apiTesting/scripts/common.js" ></script>         
    <div id="api-data-reserve" name="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNXRlc3QgY29kZTE=" data="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNW1HVnZ3YVhMRVc=" sitekey="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNQ=="></div>

通過這些代碼行,我對我的站點進行了ajax調用,並在用戶站點上呈現視圖。 如何使用純API架構使用restful服務進行身份驗證,使其像google的客戶端和密鑰結構一樣工作?

可以通過創建正確的標頭來模擬Ajax請求。 如果您想要進行基本檢查以查看請求是否是Ajax請求,您可以使用:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request } ,但是你不應該以此檢查為基礎。 如果這是你需要的,它將消除對頁面的直接訪問。

但這還不夠,您必須使用服務器端腳本(例如PHP)來保護您的Ajax調用。 例如,如果您的AJAX將密鑰傳遞給PHP文件,請在PHP文件中編寫代碼以確保它是正確的密鑰。

Facebook,谷歌和其他大公司使用iframe來提供這類服務。
以facebook為例,它為您提供腳本以放入代碼,運行時將為特定視圖創建iframe。

此外,您無法進行跨站點ajax調用。 只有從您的網站加載的iframe才能安全地加載頁面。

現在使用密鑰,您始終可以在腳本中提供公鑰。 iframe href將使用$_SERVER['http_referer']指向您的網站,您可以確保api密鑰已獲得授權。 除非您不打算發布任何私人機密數據,否則請勿使用私鑰。

我寫了一篇關於保護REST API的文章,特別是那些瀏覽器使用的API。 我推薦看看https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

Auth0,身份驗證提供商也擁有相當多的資源,除了以前使用過它們之外我沒有任何聯系,就像他們的產品一樣。

許多API都是通過JWT保護的,因為它們允許您在沒有集中式auth服務器的情況下驗證API調用。 它們基於公共/私有加密算法,其中兩個密鑰在數學上相關。 密鑰是在受信任的環境(例如您的服務器)中生成的,但任何人都可以驗證它們來自他們所說的人。 您可以設計其他身份驗證令牌方案。

根據您的需要,任何客戶端都可以訪問密鑰,因此您可以設計特定的權限模型以確保密鑰具有最小權限(即,它們不應具有管理權限等)

暫無
暫無

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

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