클래스: Mongo::Auth::Aws::Request Private
- 상속:
-
객체
- 객체
- Mongo::Auth::Aws::Request
- 다음에 정의됨:
- lib/ Mongo/auth/ Amazon Web Services/ 요청.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:, 호스팅하다:, server_nonce:, session_token: nil, 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:, 호스팅하다:, server_nonce:, session_token: nil, time: Time.now) ⇒ 요청
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
시간을 재정의하면 재현 가능한 요청(즉, 요청 재생)을 생성할 수 있습니다.
요청 을 구성합니다.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 51 def 초기화(access_key_id:, secret_access_key:, 호스트:, server_nonce:, session_token: nil, 시간: 시간.지금) @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}") 올리다 오류::InvalidServerAuthResponse, "'#{arg}'의 값은 필수" 만약 value.nil? || value.비어 있나요? end 반환 하지 않는 한 호스트 && 호스트.분량 > 255 올리다 오류::InvalidServerAuthHost, "' 호스팅하다'의 값이 너무 깁니다: #{@ 호스팅하다}" end |
인스턴스 속성 세부 정보
#access_key_id ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 access_key_id 액세스 키 ID입니다.
70 71 72 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 70 def access_key_id @access_key_id end |
#호스트 ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
호스팅하다 사용할 호스트 HTTP 헤더의 값을 반환합니다.
80 81 82 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 80 def 호스트 @host end |
#secret_access_key ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
secret_access_key 시크릿 액세스 키를 반환합니다.
73 74 75 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 73 def secret_access_key @secret_access_key end |
#server_nonce ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 server_nonce 서버 논스 바이너리 string 입니다.
83 84 85 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 83 def server_nonce @server_nonce end |
#session_token ⇒ string (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환값 session_token 임시 자격 증명 에 대한 세션 토큰입니다.
77 78 79 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 77 def session_token @session_token end |
#time ⇒ 시간 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
시간을 요청 합니다.
86 87 88 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 86 def 시간 @time end |
인스턴스 메서드 세부 정보
#권한 부여 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 권한 부여 헤더의 값을 반환합니다.
220 221 222 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 220 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 서명을 계산하는 동안 사용된 표준 요청을 반환합니다.
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 181 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 형식의 요청 날짜를 반환합니다.
95 96 97 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 95 def formatted_date formatted_time[0, 8] end |
#formatted_time ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
X-Amz-Date 헤더에 사용되는 것처럼 요청 의 formatted_time ISO8601-형식이 지정된 시간을 반환합니다.
90 91 92 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 90 def formatted_time @formatted_time ||= @time.getutc.strftime('%Y%m%dT%H%M%SZ') end |
headers #개 ⇒ <Hash>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이러한 헤더가 모두 서명된 헤더 목록의 일부인 것은 아니며, 해시의 키가 반드시 사전순으로 정렬되는 것은 아니며, 키는 어떤 경우에도 포함될 수 있습니다.
계산된 표준 요청 의 헤더가 포함된 해시를 반환합니다.
134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 134 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).삭제("\n"), } headers['x-amz-security-token'] = session_token 만약 session_token headers end |
#headers_to_sign ⇒ <Hash>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서명해야 하는 계산된 표준 요청의 헤더가 포함된 해시를 서명 준비된 형식으로 반환합니다.
#headers와 이 메서드의 차이점은 다음과 같습니다.
- 서명하지 않을 헤더를 모두 제거합니다. Amazon Web Services 사양에 따라 모든 헤더에 서명할 수 있어야 하지만, MongoDB 서버 는 일부 헤더만 서명할 것으로 예상하며 다른 헤더에 서명하면 올바른 요청 을 구성하지 않습니다.
- 모든 헤더 이름을 소문자로 설정합니다.
- 해시에서 헤더를 사전순으로 정렬합니다.
160 161 162 163 164 165 166 167 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 160 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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
리전 호스트에서 파생된 호스트의 리전을 반환합니다.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 100 def 리전 # 일반적인 경우 반환 'us-east-1' 만약 호스트 == 'sts.amazonaws.com' 올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 시작합니다: #{호스팅하다}" 만약 호스트.start_with?('.') 올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 끝납니다: #{host}" 만약 호스트.end_with?('.') 부품 = 호스트.split('.') 만약 부품.어떤? { |부분| 부분.비어 있나요? } 올리다 오류::InvalidServerAuthHost, "호스트에 빈 구성 요소가 있습니다: #{호스팅하다}" end 만약 부품.분량 == 1 'us-east-1' other 부품[1] end end |
#범위 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 요청 의 범위를 반환합니다.
122 123 124 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 122 def 범위 "#{formatted_date}/#{리전}/sts/Amazon Web Services4_request" end |
#서명 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Amazon Web Services 서명 V4 사양에 따라 표준 요청 의 계산된 서명을 반환합니다.
201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 201 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 사양에 따라 서명된 헤더의 이름을 세미콜론으로 구분한 목록을 반환합니다.
173 174 175 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 173 def Signed_headers_string headers_to_sign.키.가입(';') end |
#validate! ⇒ Hash
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
실제 STS GetCallerIdentity 요청 을 전송하여 자격 증명 과 구성된 요청 구성 요소의 유효성을 검사합니다.
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 228 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 |