クラス: Mongo::Auth::Aws::Request Private

継承:
オブジェクト
  • オブジェクト
すべて表示
定義:
lib/mongo/auth/ Amazon Web Services/ リクエスト.rb

Overview

このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Amazon Web Servicesのリクエストを操作するためのヘルパー クラス。

このクラスの主な目的は、標準のAmazon Web Services STS リクエストを生成し、その署名されたヘッダーと署名を計算することです。

以来

  • 2.0.0

定数の概要の削減

STS_REQUEST_ body =

この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。

STS GetCallerIdentity リクエストの本体。

これは現在、このクラスがサポートしている唯一のリクエストです。

以来

  • 2.0.0

" Action=GeterIdentity &Version= 2011 - 06 - 15 ".freeze
VALIDATE_TIMEOUT =

この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。

STS 経由の認証情報の検証に使用するタイムアウト(秒単位)。

以来

  • 2.0.0

10

インスタンス属性の概要を折りたたむ

インスタンス メソッドの概要を折りたたむ

コンストラクターの詳細

#初期化(access_key_id:, secret_access_key:,session_token: nil, host:, server_nance:: Time.now ) =リクエスト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

注:

時間をオーバーライドすることで、再現可能なリクエストを作成できます(つまり、リクエストを繰り返す)。

リクエストを作成します。

パラメーター:

  • access_key_id ( string )

    アクセスキー ID。

  • secret_access_key ( string )

    シークレット アクセス キー。

  • session_token string (デフォルトはnil

    一時的な認証情報用のセッション トークン。

  • ホスト ( string )

    使用するホスト HTTP ヘッダーの値。

  • server_nance ( string )

    サーバーはバイナリstring .

  • 時間 時間 (デフォルトはTime.now

    リクエストの時刻。

以来

  • 2.0.0



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 を返します。

次の値を返します。

  • ( string )

    access_key_id アクセスキー ID。

以来

  • 2.0.0



77
78
79
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、77 行を

デフォルト access_key_id
  @access_key_id
end

ホスト= string (読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

使用するホスト HTTP ヘッダーの値を返します。

次の値を返します。

  • ( string )

    host 使用するホスト HTTP ヘッダーの値。

以来

  • 2.0.0



87
88
89
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、87 行を

デフォルト ホスト
  @host
end

# secret_access_key = string (読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

secret_access_key シークレットアクセスキーを返します。

次の値を返します。

  • ( string )

    secret_access_key シークレットアクセスキー。

以来

  • 2.0.0



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を返します。

次の値を返します。

  • ( string )

    server_nance サーバー 非 バイナリ string。

以来

  • 2.0.0



90
91
92
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、90 行を

デフォルト server_nance
  @server_nance
end

#session_token 詳しくは、 string (読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Session_token 一時的な認証情報用のセッション トークンを返します。

次の値を返します。

  • ( string )

    Session_token 一時的な認証情報用のセッション トークン。

以来

  • 2.0.0



84
85
86
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、84 行を

デフォルト session_token
  @session_token
end

#時間時間(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

time リクエストの時刻を返します。

次の値を返します。

  • 時間

    time リクエストの時刻。

以来

  • 2.0.0



93
94
95
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、93 行を

デフォルト 時間
  @time
end

インスタンス メソッドの詳細

#認可= string

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Amazon Web Services署名 V4 仕様に従って、Authorization ヘッダーの値を返します。

次の値を返します。

  • ( string )

    認可ヘッダーの値。

以来

  • 2.0.0



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 署名の計算中に使用される標準リクエストを返します。

次の値を返します。

  • ( string )

    標準のリクエストです。

以来

  • 2.0.0



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 形式の日付を返します。

次の値を返します。

  • ( string )

    formatd_dateYYYYMMD 形式のリクエストの日付。

以来

  • 2.0.0



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形式の時間を返します。

次の値を返します。

  • ( string )

    formatd_time ISO 8601 - 形式のリクエスト。X-Amz-Date ヘッダーで使用されます。

以来

  • 2.0.0



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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

注:

これらのヘッダーはすべて符号付きヘッダー リストの一部ではなく、ハッシュのキーは必ずしも辞書順に順序付けられているわけではなく、キーはいずれの場合でも一致する可能性があります。

計算された標準リクエストのヘッダーを含むハッシュを返します。

次の値を返します。

  • <Hash>

    ヘッダー ヘッダー。

以来

  • 2.0.0



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サーバーは一部のヘッダーのみが署名されることを想定しており、他のヘッダーが署名されている場合は正しいリクエストを形式しません。

  • すべてのヘッダー名を小文字にします。

  • ハッシュ内のヘッダーを辞書順に順序付けます。

次の値を返します。

  • <Hash>

    ヘッダー ヘッダー。

以来

  • 2.0.0



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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

ホストから派生したホストのリージョンを返します。

次の値を返します。

  • ( string )

    region ホストから派生したホストのリージョン。

以来

  • 2.0.0



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 仕様に従って、リクエストの範囲を返します。

次の値を返します。

  • ( string )

    スコープ。

以来

  • 2.0.0



135
136
137
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、135 行を

デフォルト scope
  " Amazon Web Services4"
end

署名= string

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Amazon Web Services署名 V4 仕様に従って、標準リクエストの計算された署名を返します。

次の値を返します。

  • ( string )

    署名。

以来

  • 2.0.0



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 仕様に従って、署名されたヘッダーの名前のセミコロン区切りリストを返します。

次の値を返します。

  • ( string )

    符号付きヘッダー リスト。

以来

  • 2.0.0



188
189
190
# ファイル 'lib/mongo/auth/ Amazon Web Services/ リクエスト.rb' は、188 行を

デフォルト authorized_headers_string
  headers_to_sign.キー.join(';')
end

#validate!Hash

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

実際の STS GetCallerIdentity リクエストを送信して、認証情報と構築されたリクエスト コンポーネントを検証します。

次の値を返します。

  • ハッシュ

    結果を取得する

以来

  • 2.0.0



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')
      aws_message = ペイロード.fetch('Error').fetch('メッセージ')
      msg = " ユーザー #{ access_key_id } の認証情報チェックは 、HTTP ステータス コード #{resp .code } では失敗しました : # { { ws_code } } : # { { aws_message } "
      msg += '.' ただし、 msg.end_with?('.')
      msg += 認証情報が有効であること、および一時的な場合(セッション トークンを使用する場合)、セッション トークンが提供され、期限切れでないことを確認してください
      発生 エラー::CredentialsCheckError, msg
    end
    ペイロード.fetch(' GetCallerIdentityResponse ').fetch(' GetCallerIdentityResult ')
  end
end