클래스: Mongo::Auth::Aws::Request Private
- 상속:
-
객체
- 객체
- Mongo::Auth::Aws::Request
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 요청 작업을 위한 헬퍼 클래스입니다.
이 클래스의 주요 목적은 표준 Amazon Web Services STS 요청을 생성하고 이에 대한 서명된 헤더와 서명을 계산하는 것입니다.
상수 요약 접기
- STS_REQUEST_BODY =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
STS GetCallerIdentity 요청 의 본문입니다.
이는 현재 이 클래스가 만들기를 지원하는 유일한 요청 입니다.
"Action=GetCallerIdentity&Version=2011-06-15".동결
- VALIDATE_TIMEOUT =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
STS를 통해 자격 증명 의 유효성을 검사하는 데 사용할 제한 시간(초)입니다.
10
인스턴스 속성 요약 접기
-
#access_key_id ⇒ String
읽기 전용
비공개
Access_key_id 액세스 키 ID입니다.
-
#호스트 ⇒ string
읽기 전용
비공개
호스트 사용할 호스트 HTTP 헤더의 값입니다.
-
#secret_access_key ⇒ string
읽기 전용
비공개
Secret_access_key 비밀 액세스 키입니다.
-
#server_nonce ⇒ string
읽기 전용
비공개
Server_nonce 서버 논스 바이너리 string 입니다.
-
#session_token ⇒ String
읽기 전용
비공개
Session_token 임시 자격 증명 에 대한 세션 토큰입니다.
-
#time ⇒ 시간
읽기 전용
비공개
시간 요청 시간입니다.
인스턴스 메서드 요약 접기
-
#권한 부여 ⇒ string
비공개
Amazon Web Services 서명 V4 사양에 따라 권한 부여 헤더의 값을 반환합니다.
-
#canonical_request ⇒ string
비공개
Amazon Web Services V4 서명을 계산하는 동안 사용된 표준 요청을 반환합니다.
-
#formatted_date ⇒ string
비공개
Formatted_date YYYYMMDD 형식의 요청 날짜입니다.
-
#formatted_time ⇒ string
비공개
Formatted_time ISO8601-X-Amz-Date 헤더에 사용되는 요청의 형식이 지정된 시간입니다.
-
headers #개 ⇒ <Hash>
비공개
계산된 표준 요청 의 헤더가 포함된 해시를 반환합니다.
-
#headers_to_sign ⇒ <Hash>
비공개
서명해야 하는 계산된 표준 요청의 헤더가 포함된 해시를 서명 준비된 형식으로 반환합니다.
-
#initialize(access_key_id:, secret_access_key:, session_token: nil, host:, server_nonce:, time: Time.now) ⇒ 요청
생성자
비공개
요청 을 구성합니다.
-
#리전 ⇒ string
비공개
리전 호스팅하다 에서 파생된 호스팅하다 의 리전 입니다.
-
#범위 ⇒ string
비공개
Amazon Web Services 서명 V4 사양에 따라 요청 의 범위를 반환합니다.
-
#서명 ⇒ string
비공개
Amazon Web Services 서명 V4 사양에 따라 표준 요청 의 계산된 서명을 반환합니다.
-
#signed_headers_string ⇒ string
비공개
Amazon Web Services 서명 V4 사양에 따라 서명된 헤더의 이름을 세미콜론으로 구분한 목록을 반환합니다.
-
#validate! ⇒ Hash
비공개
실제 STS GetCallerIdentity 요청 을 전송하여 자격 증명 과 구성된 요청 구성 요소의 유효성을 검사합니다.
생성자 세부 정보
#initialize(access_key_id:, secret_access_key:, session_token: nil, 호스팅하다:, server_nonce:, time: Time.now) ⇒ 요청
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
시간을 재정의하면 재현 가능한 요청(즉, 요청 재생)을 생성할 수 있습니다.
요청 을 구성합니다.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 54 def 초기화(access_key_id:, secret_access_key:, session_token: nil, 호스트:, server_nonce:, 시간: 시간.지금 ) @access_key_id = access_key_id @secret_access_key = secret_access_key @session_token = session_token @host = 호스트 @server_nonce = server_nonce @time = 시간 %i(access_key_id secret_access_key 호스트 server_nonce).각 do |arg| value = instance_variable_get("@#{arg}") 만약 value.nil? || value.비어 있나요? 올리다 오류::InvalidServerAuthResponse, "'#{arg}'의 값은 필수" end end 만약 호스트 && 호스트.분량 > 255 올리다 오류::InvalidServerAuthHost, "' 호스팅하다'의 값이 너무 깁니다: #{@ 호스팅하다}" end end |
인스턴스 속성 세부 정보
#access_key_id ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 access_key_id 액세스 키 ID입니다.
77 78 79 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 77 def access_key_id @access_key_id end |
#호스트 ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
호스팅하다 사용할 호스트 HTTP 헤더의 값을 반환합니다.
87 88 89 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 87 def 호스트 @host end |
#secret_access_key ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
secret_access_key 시크릿 액세스 키를 반환합니다.
80 81 82 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 80 def secret_access_key @secret_access_key end |
#server_nonce ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 server_nonce 서버 논스 바이너리 string 입니다.
90 91 92 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 90 def server_nonce @server_nonce end |
#session_token ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 session_token 임시 자격 증명 에 대한 세션 토큰입니다.
84 85 86 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 84 def session_token @session_token end |
#time ⇒ 시간 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
시간을 요청 합니다.
93 94 95 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 93 def 시간 @time end |
인스턴스 메서드 세부 정보
#권한 부여 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 권한 부여 헤더의 값을 반환합니다.
235 236 237 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 235 def "Amazon Web Services4-HMAC-SHA256 Credential=#{access_key_id}/#{scope}, SignedHeaders=#{wired_headers_string}, Signature=#{서명}" end |
#canonical_request ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services V4 서명을 계산하는 동안 사용된 표준 요청을 반환합니다.
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 196 def canonical_request headers = headers_to_sign serialized_headers = headers.map do |k, v| "#{k}:#{v}" end.가입("\n") 해시된 페이로드 = 다이제스트::SHA256.신규.update(STS_REQUEST_BODY).hexdigest "POST\n/\n\n" + # 직렬화된 헤더 뒤에 두 개의 개행 문자가 있습니다. # 서명 V4 사양은 각 헤더를 다음을 포함하는 것으로 취급합니다. # 개행을 종료하고 추가 개행이 있습니다. # 헤더와 서명된 헤더 이름을 구분합니다. "#{serialized_headers}\n\n" + "#{signed_headers_string}\n" + 해시된 페이로드 end |
#formatted_date ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
formatted_date YYYYMMDD 형식의 요청 날짜를 반환합니다.
102 103 104 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 102 def formatted_date formatted_time[0, 8] end |
#formatted_time ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
X-Amz-Date 헤더에 사용되는 것처럼 요청 의 formatted_time ISO8601-형식이 지정된 시간을 반환합니다.
97 98 99 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 97 def formatted_time @formatted_time ||= @time.getutc.strftime('%Y%m%dT%H%M%SZ') end |
headers #개 ⇒ <Hash>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이러한 헤더가 모두 서명된 헤더 목록의 일부인 것은 아니며, 해시의 키가 반드시 사전순으로 정렬되는 것은 아니며, 키는 어떤 경우에도 포함될 수 있습니다.
계산된 표준 요청 의 헤더가 포함된 해시를 반환합니다.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 147 def headers headers = { '콘텐츠 길이' => STS_REQUEST_BODY.분량.to_s, 'content-type' => '애플리케이션/x-www-form-urlencoding', '호스팅하다' => 호스트, 'x-amz-date' => formatted_time, 'x-mongodb-gs2-cb-flag' => 'n', 'x-mongodb-server-nonce' => Base64.인코딩64(server_nonce).gsub("\n", ''), } 만약 session_token headers['x-amz-security-token'] = session_token end headers end |
#headers_to_sign ⇒ <Hash>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서명해야 하는 계산된 표준 요청의 헤더가 포함된 해시를 서명 준비된 형식으로 반환합니다.
#headers와 이 메서드의 차이점은 다음과 같습니다.
-
서명하지 않을 헤더를 모두 제거합니다. Amazon Web Services 사양에 따라 모든 헤더에 서명할 수 있어야 하지만, MongoDB 서버 는 일부 헤더만 서명할 것으로 예상하며 다른 헤더에 서명하면 올바른 요청 을 구성하지 않습니다.
-
모든 헤더 이름을 소문자로 설정합니다.
-
해시에서 헤더를 사전순으로 정렬합니다.
175 176 177 178 179 180 181 182 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 175 def headers_to_sign headers_to_sign = {} headers.키.sort_by { |k| k.downcase }.각 do |키| write_key = 키.downcase headers_to_sign[write_key] = headers[키] 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 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 107 def 리전 # 일반적인 경우 만약 호스트 == 'sts.amazonaws.com' 반환 'us-east-1' end 만약 호스트.start_with?('.') 올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 시작합니다: #{호스팅하다}" end 만약 호스트.end_with?('.') 올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 끝납니다: #{host}" end 부품 = 호스트.split('.') 만약 부품.어떤? { |부분| 부분.비어 있나요? } 올리다 오류::InvalidServerAuthHost, "호스트에 빈 구성 요소가 있습니다: #{호스팅하다}" end 만약 부품.분량 == 1 'us-east-1' other 부품[1] end end |
#범위 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 요청 의 범위를 반환합니다.
135 136 137 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 135 def 범위 "#{formatted_date}/#{리전}/sts/Amazon Web Services4_request" end |
#서명 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 표준 요청 의 계산된 서명을 반환합니다.
216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 216 def 서명 hashed_canonical_request = 다이제스트::SHA256.hexdigest(canonical_request) string_to_sign = "Amazon Web Services4-HMAC-SHA256\n" + "#{formatted_time}\n" + "#{범위}\n" + hashed_canonical_request # 모든 중간 HMAC 작업은 16진수로 인코딩되지 않습니다. Mac = hmac("Amazon Web Services4#{secret_access_key}", formatted_date) Mac = hmac(Mac, 리전) Mac = hmac(Mac, 'sts') Signing_key = hmac(Mac, 'Amazon Web Services4_request') # 최종 HMAC 연산만 16진수로 인코딩됩니다. hmac_hex(Signing_key, string_to_sign) end |
#signed_headers_string ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 서명된 헤더의 이름을 세미콜론으로 구분한 목록을 반환합니다.
188 189 190 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 188 def Signed_headers_string headers_to_sign.키.가입(';') 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 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 243 def 유효성을 검사합니다! sts_request = Net::HTTP::post.신규("https://#{호스팅하다}").탭 do |req| headers.각 do |k, v| req[k] = v end req['권한 부여'] = req['accept'] = '애플리케이션/JSON' req.body = STS_REQUEST_BODY end HTTP = Net::HTTP.신규(호스트, 443) HTTP.use_ssl = true HTTP.시작하기 do resp = 시간 초과.타임아웃(VALIDATE_TIMEOUT, 오류::CredentialCheckError, 'GetCallerIdentity 요청 시간 초과') do HTTP.요청(sts_request) end Payload = JSON.parse(resp.body) 만약 resp.코드 != '200' aws_code = Payload.가져오기('오류').가져오기('Code') = Payload.가져오기('오류').가져오기('메시지') msg = "사용자 #{access_key_id}에 대한 자격 증명 확인 이 HTTP 상태 코드 #{resp.code}: #{aws_code}: #{} }로 인해 실패했습니다. " msg += '.' 하지 않는 한 msg.end_with?('.') msg += " 자격 증명 이 유효한지, 자격 증명이 임시인 경우(예: 세션 토큰 사용) 세션 토큰이 제공되었으며 만료되지 않았는지 확인하세요. " 올리다 오류::CredentialCheckError, msg end Payload.가져오기('GetCallerIdentityResponse').가져오기('GetCallerIdentityResult') end end |