module Qiniu::Auth
Constants
- DEFAULT_AUTH_SECONDS
- EMPTY_ARGS
Public Class Methods
authenticate_callback_request(auth_str, url, body = '')
click to toggle source
# File lib/qiniu/auth.rb, line 264 def authenticate_callback_request(auth_str, url, body = '') ### 提取AK/SK信息 access_key = Config.settings[:access_key] secret_key = Config.settings[:secret_key] ### 检查签名格式 ak_pos = auth_str.index(access_key) if ak_pos.nil? then return false end colon_pos = auth_str.index(':', ak_pos + 1) if colon_pos.nil? || ((ak_pos + access_key.length) != colon_pos) then return false end encoded_sign = generate_acctoken_sign_with_mac(access_key, secret_key, url, body) sign_pos = auth_str.index(encoded_sign, colon_pos + 1) if sign_pos.nil? || ((sign_pos + encoded_sign.length) != auth_str.length) then return false end return true end
calculate_deadline(expires_in, deadline = nil)
click to toggle source
# File lib/qiniu/auth.rb, line 14 def calculate_deadline(expires_in, deadline = nil) ### 授权期计算 if expires_in.is_a?(Integer) && expires_in > 0 then # 指定相对时间,单位:秒 return Time.now.to_i + expires_in elsif deadline.is_a?(Integer) then # 指定绝对时间,常用于调试和单元测试 return deadline end # 默认授权期1小时 return Time.now.to_i + DEFAULT_AUTH_SECONDS end
calculate_hmac_sha1_digest(sk, str)
click to toggle source
# File lib/qiniu/auth.rb, line 28 def calculate_hmac_sha1_digest(sk, str) raise ArgumentError, "Please set Qiniu's access_key and secret_key before authorize any tokens." if sk.nil? OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), sk, str) end
generate_acctoken(url, body = '')
click to toggle source
# File lib/qiniu/auth.rb, line 240 def generate_acctoken(url, body = '') encoded_sign = generate_acctoken_sign_with_mac(Config.settings[:access_key], Config.settings[:secret_key], url, body) return "#{Config.settings[:access_key]}:#{encoded_sign}" end
generate_acctoken_sign_with_mac(access_key, secret_key, url, body)
click to toggle source
# File lib/qiniu/auth.rb, line 215 def generate_acctoken_sign_with_mac(access_key, secret_key, url, body) ### 解析URL,生成待签名字符串 uri = URI.parse(url) signing_str = uri.path # 如有QueryString部分,则需要加上 query_string = uri.query if query_string.is_a?(String) && !query_string.empty? signing_str += '?' + query_string end # 追加换行符 signing_str += "\n" # 如果有Body,则也加上 # (仅限于mime == "application/x-www-form-urlencoded"的情况) if body.is_a?(String) && !body.empty? signing_str += body end ### 生成数字签名 sign = calculate_hmac_sha1_digest(secret_key, signing_str) return Utils.urlsafe_base64_encode(sign) end
generate_uptoken(put_policy)
click to toggle source
# File lib/qiniu/auth.rb, line 245 def generate_uptoken(put_policy) ### 提取AK/SK信息 access_key = Config.settings[:access_key] secret_key = Config.settings[:secret_key] ### 生成待签名字符串 encoded_put_policy = Utils.urlsafe_base64_encode(put_policy.to_json) ### 生成数字签名 sign = calculate_hmac_sha1_digest(secret_key, encoded_put_policy) encoded_sign = Utils.urlsafe_base64_encode(sign) ### 生成上传授权凭证 uptoken = "#{access_key}:#{encoded_sign}:#{encoded_put_policy}" ### 返回上传授权凭证 return uptoken end