小編給大家分享一下RGW S3 Authorize有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
10年積累的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有天山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
截止到目前為止,RGW S3的認(rèn)證部分支持AWS v4認(rèn)證、AWS v2認(rèn)證以及匿名用戶認(rèn)證。這三種認(rèn)證的總?cè)肟谖挥趓gw_process.cc::process_request()函數(shù),該函數(shù)中處理認(rèn)證部分的代碼如下:
rgw_process.cc::process_request()
|__RGW_Auth_S3::authorize()
|__根據(jù)HTTP請求參數(shù)決定認(rèn)證方式(AWS v4/AWS v2/匿名認(rèn)證)
下面分別描述這三種認(rèn)證方式:
1、AWS v2認(rèn)證方式。
AWS v2認(rèn)證由RGW_Auth_S3::authorize_v2()函數(shù)處理。使用AWS v2方式認(rèn)證,用戶首現(xiàn)根據(jù)用戶的secret key對認(rèn)證頭部數(shù)據(jù)進(jìn)行簽名操作,與此同時將認(rèn)證頭部數(shù)據(jù)、簽名數(shù)據(jù)、用戶的access key信息加入到HTTP請求數(shù)據(jù)流中。RGW收到HTTP請求數(shù)據(jù)流后提取出上述信息,之后通過用戶的access key獲取到用戶信息(user info)。之后使用用戶信息中的secret key對HTTP請求數(shù)據(jù)流中的認(rèn)證頭部數(shù)據(jù)進(jìn)行簽名操作,最后判斷由RGW計算出來的簽名值是否與HTTP請求數(shù)據(jù)流中的簽名值一致來實(shí)現(xiàn)用戶的認(rèn)證。
AWS v2函數(shù)處理流程如下:
RGW_Auth_S3::authorize()
|__通過HTTP請求數(shù)據(jù)流得到用戶的access key(ASWAccessKeyId)、簽名字符串(Signature)
|__檢查是否是keystone認(rèn)證,若是則走keystone認(rèn)證
|__檢查是否是LDAP認(rèn)證,若是則走LDAP認(rèn)證
|__通過用戶的access_key獲取到user info信息
|__rgw_create_s3_canonical_header() 從HTTP請求數(shù)據(jù)流中獲取認(rèn)證頭部數(shù)據(jù)
認(rèn)證頭部分包括如下信息:
req_info.method
req_info.env[HTTP_CONTENT_MD5]
req_info.env[CONTENT_TYPE]
req_info.env[HTTP_DATE]
req_info.x_meta_map
req_info.request_uri
req_info.args.get_sub_resources()
|__rgw_get_s3_header_digest()
|__ceph_armor() 使用user info的secret key對認(rèn)證頭部分做簽名操作并得到簽名結(jié)果
|__比較計算的簽名和傳過來的auth_sign是否一致
2、AWS v4認(rèn)證方式。
AWS v4認(rèn)證由RGW_Auth_S3::authorize_v4()函數(shù)處理。根據(jù)AWS最新的認(rèn)證規(guī)范,AWS v4認(rèn)證要比AWS v2認(rèn)證更加全面。
AWS v4認(rèn)證使用的主要數(shù)據(jù)結(jié)構(gòu)說明如下:
struct rgw_aws4_auth {
string date; "X-Amz-Date"
string expires; “X-Amz-Expires"
string credential; "X-Amz-Credential"
string signedheaders; “X-Amz-SignedHeaders"
string signed_hdrs;
string access_key_id;
string credential_scope;
string canonical_uri;
string canonical_qs;
string signature; “X-Amz-Signature"
string new_signature;
string payload_hash;
};
AWS v4認(rèn)證處理流程如下:
RGW_Auth_S3::authorize_v4()
|__創(chuàng)建struct rgw_aws4_auth對象
|__根據(jù)HTTP請求數(shù)據(jù)流初始化struct rgw_aws4_auth對象
|__檢查struct rgw_aws4_auth::credential格式是否正確
|__從struct rgw_aws4_auth::credential中獲取access key(從開始到第一個”/"為止)
|__rgw_get_user_info_by_access_key() 通過access key得到用戶信息user info
|__解析HTTP請求字符串中info.request_params字符串得到canonical_qs_map[key]=value
|__按照格式key=value&key=value將canonical_qs_map中的內(nèi)容寫入到struct rgw_aws4_auth::cannonical_qs中
|__解析struct rgw_aws4_auth::signedheaders字符串得到canonical_hdrs_map[token]=token_value
|__按照格式token:value\ntoken:value醬canonical_hdrs_map中的內(nèi)容寫入到struct rgw_aws4_auth::canonical_hdrs中
|__設(shè)置struct rgw_aws4_auth::signed_hdrs = struct rgw_aws4_auth::signedheaders
|__authorize_v4_complete()
|__rgw_create_s3_v4_canonical_request()
|__rgw_assemble_s3_v4_canonical_request()
|__rgw_hash_s3_string_sha256()
|__rgw_create_s3_v4_string_to_sign()
|__rgw_assemble_s3_v4_string_to_sign()
|__rgw_calculate_s3_v4_aws_signature()
|__比較struct rgw_aws4_auth::signature與經(jīng)過計算后的struct rgw_aws4_auth::new_signature是否一致
3、匿名用戶認(rèn)證方式。
匿名用戶認(rèn)證方式由rgw_rest_s3.cc::init_anon_user()函數(shù)處理。匿名用戶認(rèn)證處理流程如下:
init_anon_user()
|__rgw_get_anon_user()
|__設(shè)置用戶信息RGWUserInfo.user_id = RGW_USER_ANON_ID
|__清空用戶信息RGWUserInfo.display_name和access_key
|__設(shè)置struct req_state::perm_mask = RGW_PERM_FULL_CONTROL
以上是“RGW S3 Authorize有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
標(biāo)題名稱:RGWS3Authorize有什么用
文章源于:http://muchs.cn/article10/jpgsdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站營銷、做網(wǎng)站、Google、移動網(wǎng)站建設(shè)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)