auth_tool.h 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef UTIL_AUTHTOOl_H
  2. #define UTIL_AUTHTOOl_H
  3. #include <stdint.h>
  4. #include <map>
  5. #include <string>
  6. #include <vector>
  7. #include <unordered_set>
  8. #include "request/base_req.h"
  9. #include "util/noncopyable.h"
  10. namespace qcloud_cos {
  11. class AuthTool : private NonCopyable {
  12. public:
  13. /// \brief 返回签名,可以在指定的有效期内(通过CosSysConfig设置, 默认60s)使用
  14. ///
  15. /// \param secret_id 开发者拥有的项目身份识别 ID,用以身份认证
  16. /// \param secret_key 开发者拥有的项目身份密钥
  17. /// \param http_method http方法,如POST/GET/HEAD/PUT等, 传入大小写不敏感
  18. /// \param in_uri http uri
  19. /// \param headers http header的键值对
  20. /// \param params http params的键值对
  21. ///
  22. /// \return 字符串形式的签名,返回空串代表失败
  23. static std::string Sign(const std::string& secret_id,
  24. const std::string& secret_key,
  25. const std::string& http_method,
  26. const std::string& in_uri,
  27. const std::map<std::string, std::string>& headers,
  28. const std::map<std::string, std::string>& params,
  29. const std::unordered_set<std::string>& not_sign_headers);
  30. /// \brief 返回签名,可以在指定的有效期内使用
  31. ///
  32. /// \param secret_id 开发者拥有的项目身份识别 ID,用以身份认证
  33. /// \param secret_key 开发者拥有的项目身份密钥
  34. /// \param http_method http方法,如POST/GET/HEAD/PUT等, 传入大小写不敏感
  35. /// \param in_uri http uri
  36. /// \param headers http header的键值对
  37. /// \param params http params的键值对
  38. ///
  39. /// \return 字符串形式的签名,返回空串代表失败
  40. static std::string Sign(const std::string& secret_id,
  41. const std::string& secret_key,
  42. const std::string& http_method,
  43. const std::string& in_uri,
  44. const std::map<std::string, std::string>& headers,
  45. const std::map<std::string, std::string>& params,
  46. uint64_t start_time_in_s, uint64_t end_time_in_s,
  47. const std::unordered_set<std::string>& not_sign_headers);
  48. /// \brief get rtmp signature
  49. static std::string RtmpSign(const std::string& secret_id,
  50. const std::string& secret_key,
  51. const std::string& token,
  52. const std::string& bucket,
  53. const std::string& channel,
  54. const std::map<std::string, std::string>& params,
  55. uint64_t expire);
  56. private:
  57. /// \brief 把params中的数据,转小写,正排,key放在param_list
  58. /// key=value放param_value_list \param params 参数 \param key_encode
  59. /// key是否进行uri编码 \param value_encode value是否进行uri编码 \param
  60. /// value_lower value是否小写 \param param_list 参数名列表,以;分隔 \param
  61. /// param_value_list 参数键值对列表,以&分隔 \retval 无
  62. static void FillMap(const std::map<std::string, std::string>& params,
  63. bool key_encode, bool value_encode, bool value_lower,
  64. std::string* param_list, std::string* param_value_list);
  65. /// \brief 找出需要鉴权的头部,并设置,目前host conent-type 还有x开头的都要鉴权
  66. /// \param hedaers 头部的kv对
  67. /// \param filted_req_headers 需要鉴权的头部
  68. /// \retval 无
  69. static void FilterAndSetSignHeader(
  70. const std::map<std::string, std::string>& headers,
  71. std::map<std::string, std::string>* filted_req_headers,
  72. const std::unordered_set<std::string>& not_sign_headers);
  73. };
  74. } // namespace qcloud_cos
  75. #endif // AUTHTOOL_H