應用場景:圖檔等資源需要設定權限,如:隻有認證過的使用者才能通路自己的圖檔。
解決辦法:使用nginx的防盜鍊子產品http_secure_link可以實作,該子產品預設情況下不包含,故在安裝時要加上--with-http_secure_link_module
該子產品根據兩個參數控制權限通路,一個是過期時間(即該連結在這個時間之前可通路,過期後無法通路),該參數主要出于安全考慮。
另一個是通過md5算法算出來的key,一般通過uri計算
舉例:
上面的secure_link定義了控制權限的兩個參數(分别是st, e)
其中e就是上述的過期時間,建議e = 目前時間 + 有效期限(5分鐘)
例如:
e = date +%s -d "december 22, 2014 12:22:03"
= 1419222123
st的計算公式如下:md5(pkey,uri,e),其中pkey是自定義的常量
st = php -r ‘print str_replace("=", "",strtr(base64_encode(md5("guahao@345/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg1419222123",true)),"+/","-_")) . "\n";‘
=13c9kzrzt1qnngpg4vtksw
效果如下:
http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg --不可通路
http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg?st=13c9kzrzt1qnngpg4vtksw&e=1419222123 --過期前可通路,過期後不可通路
http://192.168.1.22/img/headpic/13/13_140x140.jpg --不在dossier下面的圖檔沒有通路限制
ok,到此為此我們基本實作的基于應用的權限控制,且方法靈活,因為e和st的生成由應用程式來控制,能進行任意的修改和變動,而架構不受影響。