sts.js 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. var AWS = require('../core');
  2. var resolveRegionalEndpointsFlag = require('../config_regional_endpoint');
  3. var ENV_REGIONAL_ENDPOINT_ENABLED = 'AWS_STS_REGIONAL_ENDPOINTS';
  4. var CONFIG_REGIONAL_ENDPOINT_ENABLED = 'sts_regional_endpoints';
  5. AWS.util.update(AWS.STS.prototype, {
  6. /**
  7. * @overload credentialsFrom(data, credentials = null)
  8. * Creates a credentials object from STS response data containing
  9. * credentials information. Useful for quickly setting AWS credentials.
  10. *
  11. * @note This is a low-level utility function. If you want to load temporary
  12. * credentials into your process for subsequent requests to AWS resources,
  13. * you should use {AWS.TemporaryCredentials} instead.
  14. * @param data [map] data retrieved from a call to {getFederatedToken},
  15. * {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.
  16. * @param credentials [AWS.Credentials] an optional credentials object to
  17. * fill instead of creating a new object. Useful when modifying an
  18. * existing credentials object from a refresh call.
  19. * @return [AWS.TemporaryCredentials] the set of temporary credentials
  20. * loaded from a raw STS operation response.
  21. * @example Using credentialsFrom to load global AWS credentials
  22. * var sts = new AWS.STS();
  23. * sts.getSessionToken(function (err, data) {
  24. * if (err) console.log("Error getting credentials");
  25. * else {
  26. * AWS.config.credentials = sts.credentialsFrom(data);
  27. * }
  28. * });
  29. * @see AWS.TemporaryCredentials
  30. */
  31. credentialsFrom: function credentialsFrom(data, credentials) {
  32. if (!data) return null;
  33. if (!credentials) credentials = new AWS.TemporaryCredentials();
  34. credentials.expired = false;
  35. credentials.accessKeyId = data.Credentials.AccessKeyId;
  36. credentials.secretAccessKey = data.Credentials.SecretAccessKey;
  37. credentials.sessionToken = data.Credentials.SessionToken;
  38. credentials.expireTime = data.Credentials.Expiration;
  39. return credentials;
  40. },
  41. assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {
  42. return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);
  43. },
  44. assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {
  45. return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);
  46. },
  47. /**
  48. * @api private
  49. */
  50. setupRequestListeners: function setupRequestListeners(request) {
  51. request.addListener('validate', this.optInRegionalEndpoint, true);
  52. },
  53. /**
  54. * @api private
  55. */
  56. optInRegionalEndpoint: function optInRegionalEndpoint(req) {
  57. var service = req.service;
  58. var config = service.config;
  59. config.stsRegionalEndpoints = resolveRegionalEndpointsFlag(service._originalConfig, {
  60. env: ENV_REGIONAL_ENDPOINT_ENABLED,
  61. sharedConfig: CONFIG_REGIONAL_ENDPOINT_ENABLED,
  62. clientConfig: 'stsRegionalEndpoints'
  63. });
  64. if (
  65. config.stsRegionalEndpoints === 'regional' &&
  66. service.isGlobalEndpoint
  67. ) {
  68. //client will throw if region is not supplied; request will be signed with specified region
  69. if (!config.region) {
  70. throw AWS.util.error(new Error(),
  71. {code: 'ConfigError', message: 'Missing region in config'});
  72. }
  73. var insertPoint = config.endpoint.indexOf('.amazonaws.com');
  74. var regionalEndpoint = config.endpoint.substring(0, insertPoint) +
  75. '.' + config.region + config.endpoint.substring(insertPoint);
  76. req.httpRequest.updateEndpoint(regionalEndpoint);
  77. req.httpRequest.region = config.region;
  78. }
  79. }
  80. });