クラス: Mongo::Auth::Aws::Request Private
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Auth::Aws::Request
- 定義:
- lib/mongo/auth/ Amazon Web Services/ リクエスト.rb
Overview
このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Servicesのリクエストを操作するためのヘルパー クラス。
このクラスの主な目的は、標準のAmazon Web Services STS リクエストを生成し、その署名されたヘッダーと署名を計算することです。
定数の概要の削減
- STS_REQUEST_ body =
この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。
STS GetCallerIdentity リクエストの本体。
これは現在、このクラスがサポートしている唯一のリクエストです。
" Action=GeterIdentity &Version= 2011 - 06 - 15 ".freeze
- VALIDATE_TIMEOUT =
この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。
STS 経由の認証情報の検証に使用するタイムアウト(秒単位)。
10
インスタンス属性の概要を折りたたむ
-
#access_key_id ⇒ String
readOnly
private
Access_key_id アクセスキー ID。
-
#ホスト= string
readOnly
private
Host 使用するホスト HTTP ヘッダーの値。
-
# secret_access_key = string
readOnly
private
Secret_access_key シークレットアクセスキー。
-
# server_nance = string
readOnly
private
Server_nance サーバー mongos バイナリstring 。
-
#session_token ⇒ String
readOnly
private
Session_token 一時的な認証情報用のセッション トークン。
-
#時間= 時間
readOnly
private
時間 リクエストの時刻。
インスタンス メソッドの概要を折りたたむ
-
#認可= string
private
Amazon Web Services署名 V4 仕様に従って、Authorization ヘッダーの値を返します。
-
# canonical_request = string
private
Amazon Web Services V4 署名の計算中に使用される標準リクエストを返します。
-
#formatted_date = string
private
formatd_dateYYYYMMD 形式のリクエストの日付。
-
#formatted_time ==string
private
Focused_time ISO 8601形式のリクエスト。X-Amz-Date ヘッダーで使用されます。
-
#ヘッダー= <Hash>
private
計算された標準リクエストのヘッダーを含むハッシュを返します。
-
#headers_to_sign ⇒ <Hash>
private
署名される必要がある計算された標準リクエストのヘッダーを含むハッシュを、準備ができた形式で返します。
-
#初期化(access_key_id:, secret_access_key:,session_token: nil, host:, server_nance:: Time.now ) = リクエスト
コンストラクター
private
リクエストを作成します。
-
リージョン~ string
private
リージョン ホストから派生したホストのリージョン。
-
スコープ= string
private
Amazon Web Services署名 V4 仕様に従って、リクエストの範囲を返します。
-
署名= string
private
Amazon Web Services署名 V4 仕様に従って、標準リクエストの計算された署名を返します。
-
#signed_headers_string = string
private
Amazon Web Services署名 V4 仕様に従って、署名されたヘッダーの名前のセミコロン区切りリストを返します。
-
#validate! ⇒ Hash
private
実際の STS GetCallerIdentity リクエストを送信して、認証情報と構築されたリクエスト コンポーネントを検証します。
コンストラクターの詳細
#初期化(access_key_id:, secret_access_key:,session_token: nil, host:, server_nance:: Time.now ) =リクエスト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
時間をオーバーライドすることで、再現可能なリクエストを作成できます(つまり、リクエストを繰り返す)。
リクエストを作成します。
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、54 行を デフォルト 初期化(access_key_id:, secret_access_key:, session_token: nil, ホスト:, server_nance:, time: 時間.になりました ) @access_key_id = access_key_id @secret_access_key = secret_access_key @session_token = session_token @host = ホスト @server_nance = server_nance @time = 時間 %i(access_key_id secret_access_key ホスト server_nance).各 行う |arg| 価値 = instance_variable_get(" @ #{ arg } ") 場合 価値.nil? || 価値.空の場合 発生 エラー::InvalidServerAuthResponse, " #{ arg } の 値 は必須です " end end 場合 ホスト & & ホスト.Length > 255 発生 エラー::InvalidServerAuthHost, " " host" の値が長すぎます: #{ @host } " end end |
インスタンス属性の詳細
# access_key_id = string (読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
access_key_id アクセスキー ID を返します。
77 78 79 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、77 行を デフォルト access_key_id @access_key_id end |
ホスト= string (読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
使用するホスト HTTP ヘッダーの値を返します。
87 88 89 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、87 行を デフォルト ホスト @host end |
# secret_access_key = string (読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
secret_access_key シークレットアクセスキーを返します。
80 81 82 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、80 行を デフォルト secret_access_key @secret_access_key end |
# server_nance = string (読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
server_nance サーバー mongos バイナリstringを返します。
90 91 92 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、90 行を デフォルト server_nance @server_nance end |
#session_token 詳しくは、 string (読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Session_token 一時的な認証情報用のセッション トークンを返します。
84 85 86 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、84 行を デフォルト session_token @session_token end |
#時間~時間(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
time リクエストの時刻を返します。
93 94 95 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、93 行を デフォルト 時間 @time end |
インスタンス メソッドの詳細
#認可= string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Services署名 V4 仕様に従って、Authorization ヘッダーの値を返します。
235 236 237 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、235 行を デフォルト " Amazon Web Services 4-HMAC-SHA256 認証情報= #{ access_key_id } / #{ scope } 、Signed Headers= #{ signed_headers_string } 、Signature= # { signing } } " end |
# canonical_request = string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Services V4 署名の計算中に使用される標準リクエストを返します。
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、196 行を デフォルト 標準_リクエスト ヘッダー = headers_to_sign Serialed_headers = ヘッダー.map 行う |k, v| " #{ k } : #{ v } " end.join(" \n ") hashed_ payload = ダイジェスト::SHA256.新着情報.update(STS_REQUEST_ボディ).16進数 " POST\n/\n\n " + #シリアル化されたヘッダーの後に 2 回の改行があり、 #署名 V 4仕様では、各ヘッダーは次を含むものとして扱われます: 改行を終了し、追加の改行がある場合 符号付きヘッダー名から ヘッダーを区切ります。 " " + " #{ signed_headers_string } \n " + hashed_ payload end |
#formatted_date = string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
リクエストのformatted_date YYYYMMD 形式の日付を返します。
102 103 104 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、102 行を デフォルト formatd_date formatted_time[0, 8] end |
#formatted_time == string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
X-Amz-Date ヘッダーで使用されるリクエストのformatd_time ISO 8601形式の時間を返します。
97 98 99 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、97 行を デフォルト formatted_time @format_time ||= @time.getutc.strftime('%Y%m%dT%H%M%SZ') end |
#ヘッダー= <Hash>
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
これらのヘッダーはすべて符号付きヘッダー リストの一部ではなく、ハッシュのキーは必ずしも辞書順に順序付けられているわけではなく、キーはいずれの場合でも一致する可能性があります。
計算された標準リクエストのヘッダーを含むハッシュを返します。
147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、147 行を デフォルト ヘッダー ヘッダー = { ' content-Length ' => STS_REQUEST_ボディ.Length.to_s, 'content-type' => ' application/x-www-form-urlcoded ', 'ホスト' => ホスト, 'x-amz-date' => formatted_time, ' x-mongodb-gs 2 -cs フラグ' => 'n', ' x-mongodb-server-nance ' => base64.encode64(server_nance).gsub(" \n ", ''), } 場合 session_token ヘッダー[「 x-amz-security-token 」] = session_token end ヘッダー end |
#headers_to_sign ⇒ <Hash>
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
署名される必要がある計算された標準リクエストのヘッダーを含むハッシュを、準備ができた形式で返します。
ヘッダーとこのメソッドの違いは次のメソッドです。
-
署名される対象ではないヘッダーを削除します。 Amazon Web Servicesの仕様に従って、すべてのヘッダーに署名できるはずですが、 MongoDBサーバーは一部のヘッダーのみが署名されることを想定しており、他のヘッダーが署名されている場合は正しいリクエストを形式しません。
-
すべてのヘッダー名を小文字にします。
-
ハッシュ内のヘッダーを辞書順に順序付けます。
175 176 177 178 179 180 181 182 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、175 行を デフォルト headers_to_sign headers_to_sign = {} ヘッダー.キー.sort_by { |k| k.ダウンケース }.各 行う |キー| write_key = キー.ダウンケース headers_to_sign[write_key] = ヘッダー[キー] end headers_to_sign end |
リージョン~ string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ホストから派生したホストのリージョンを返します。
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、107 行を デフォルト リージョン # 一般的なケース 場合 ホスト == 'sts.amazonaws.com' return 「 us-east- 1 」 end 場合 ホスト.start_with?('.') 発生 エラー::InvalidServerAuthHost, "ホストは次の期間で始まります: #{ host } " end 場合 ホスト.end_with?('.') 発生 エラー::InvalidServerAuthHost, "ホストは次の期間で終了します: #{ host } " end 部分 = ホスト.分裂('.') 場合 部分.any? { |部分| 部分.空の場合 } 発生 エラー::InvalidServerAuthHost, "ホストには空のコンポーネントがあります: #{ host } " end 場合 部分.Length == 1 「 us-east- 1 」 else 部分[1] end end |
スコープ= string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Services署名 V4 仕様に従って、リクエストの範囲を返します。
135 136 137 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、135 行を デフォルト scope " Amazon Web Services4" end |
署名= string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Services署名 V4 仕様に従って、標準リクエストの計算された署名を返します。
216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、216 行を デフォルト 署名 hshed_canonical_request = ダイジェスト::SHA256.16進数(標準_リクエスト) string_to_sign = " Amazon Web Services 4-HMAC-SHA256\n " + " #{ formatted_time } \n " + " #{ scope } \n " + hshed_canonical_request : すべての中間 HMAC 操作は 16 進数エンコードされません。 mac = hmac(" Amazon Web Services 4 #{ secret_access_key } ", formatd_date) mac = hmac(mac, リージョン) mac = hmac(mac, ' sts ') signing_key = hmac(mac, 「 Amazon Web Services 4_request 」) 最後の HMAC 操作のみが 16 進数でエンコードされます。 hmac_hex(signing_key, string_to_sign) end |
#signed_headers_string = string
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
Amazon Web Services署名 V4 仕様に従って、署名されたヘッダーの名前のセミコロン区切りリストを返します。
188 189 190 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、188 行を デフォルト authorized_headers_string headers_to_sign.キー.join(';') end |
#validate! ⇒ Hash
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
実際の STS GetCallerIdentity リクエストを送信して、認証情報と構築されたリクエスト コンポーネントを検証します。
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、243 行を デフォルト validate! sts_request = Net::HTTP::POST.新着情報(" https:// #{ host } ").タップ 行う |req| ヘッダー.各 行う |k, v| req[k] = v end req['認可'] = req[はを受け入れます] = ' application/ JSON ' req.body = STS_REQUEST_ボディ end http = Net::HTTP.新着情報(ホスト, 443) http.use_ssl = true http.始める 行う resp = タイムアウト.タイムアウト(VALIDATE_TIMEOUT, エラー::CredentialsCheckError, ' GetCallerIdentity リクエストがタイムアウトしました') 行う http.リクエスト(sts_request) end ペイロード = JSON.parse(resp.body) 場合 resp.コード != '200' aws_code = ペイロード.fetch('Error').fetch('Code') = ペイロード.fetch('Error').fetch('メッセージ') msg = " ユーザー #{ access_key_id } の認証情報チェックは 、HTTP ステータス コード #{resp .code } では失敗しました : # { { ws_code } } : # { { } " msg += '.' ただし、 msg.end_with?('.') msg += 「認証情報が有効であること、および一時的な場合(セッション トークンを使用する場合)、セッション トークンが提供され、期限切れでないことを確認してください。 発生 エラー::CredentialsCheckError, msg end ペイロード.fetch(' GetCallerIdentityResponse ').fetch(' GetCallerIdentityResult ') end end |