簡體   English   中英

拒絕訪問(403)來自AWS Cloudfront Signed Cookie on Rails支持的應用程序

[英]Access Denied (403) from AWS Cloudfront Signed Cookie on Rails backed app

我為此嘗試了一整天,但我不能......

答:我創建了一個用於創建簽名cookie的模型。 我得到了以下幫助: spacevatican.org

def cookie_data(resource, expiry)
  raw_policy = policy(resource, expiry)
  {
    'CloudFront-Expires' => expiry.utc.to_i,
    'CloudFront-Signature' => sign(raw_policy),
    'CloudFront-Key-Pair-Id' => ENV['CLOUDFRONT_KEY_PAIR_ID']
  }
end

private

def policy(url, expiry)
  {
     "Statement"=> [
        {
           "Resource" => url,
           "Condition"=>{
              "DateLessThan" =>{"AWS:EpochTime"=> expiry.utc.to_i}
           }
        }
     ]
  }.to_json.gsub(/\s+/,'')
end

def safe_base64(data)
  Base64.strict_encode64(data).tr('+=/', '-_~')
end

def sign(data)
  digest = OpenSSL::Digest::SHA1.new
  key    = OpenSSL::PKey::RSA.new ENV['CLOUDFRONT_PRIVATE_KEY']
  result = key.sign digest, data
  safe_base64(result)
end

B.使用'resource'和'expiry'調用cookie_data。 我得到了蘭達爾夫的幫助獲得適當的資源。

base_domain = '.myapp.com' # sample name
cookie_domain: '.myapp.com'

cookie_data("http://#{URI.parse(base_domain).host}/*", 1.hour.from_now).each do |name, value|
  cookies[name] = { value: value, domain: cookie_domain }
end

C.從A&B,Cloudfront的三個驗證通過 - 1.三個cookie現有驗證,和2.到期現有驗證,3。解碼可用驗證。 由於無效請求上的錯誤消息,我知道這三個驗證。 但畢竟,我總是得到同樣的信息 - 拒絕訪問。

有一些嫌疑人。

  1. 我的Cloudfront CNAME是'img.myapp.com' (示例),但我的測試域是'http://dev.myapp.com/#/home' ,這是我的本地開發服務器(我更改了localhost名稱) 。
    所以我嘗試了很多(base_domain,cookie_domain)組合:(img.myapp.com,.myapp.com),(。myapp.com,.myapp.com),(dev.myapp.com,.myapp.com) 。
    但是全部否認了。

  2. 我的Cloudfront和S3設置與randalv上的相同 但我介意兩件事。 在Cloudfront的原始設置中,“限制存儲桶訪問”為“否”。 我不在S3上創建CORS配置。

我解決了自己。 我有三個缺點,現在糾正它們后效果很好。

首先 ,我將過期更改為政策。

'CloudFront-Expires' => expiry.utc.to_i,

'CloudFront-Policy' => safe_base64(raw_policy),

實際上,我曾使用過政策(自定義)而不是過期(罐裝)。 在我嘗試期間,我改變了。 但我不知道為什么到期版本不起作用。

其次 ,我的base_domain是'img.myapp.com',cookie_domain是'.myapp.com'。

第三 ,不要在最終網址上輸入存儲桶名稱。 非常微不足道的錯誤,但很重要。

暫無
暫無

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

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