saml_credentials.js (3431B)
1 var AWS = require('../core'); 2 var STS = require('../../clients/sts'); 3 4 /** 5 * Represents credentials retrieved from STS SAML support. 6 * 7 * By default this provider gets credentials using the 8 * {AWS.STS.assumeRoleWithSAML} service operation. This operation 9 * requires a `RoleArn` containing the ARN of the IAM trust policy for the 10 * application for which credentials will be given, as well as a `PrincipalArn` 11 * representing the ARN for the SAML identity provider. In addition, the 12 * `SAMLAssertion` must be set to the token provided by the identity 13 * provider. See {constructor} for an example on creating a credentials 14 * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values. 15 * 16 * ## Refreshing Credentials from Identity Service 17 * 18 * In addition to AWS credentials expiring after a given amount of time, the 19 * login token from the identity provider will also expire. Once this token 20 * expires, it will not be usable to refresh AWS credentials, and another 21 * token will be needed. The SDK does not manage refreshing of the token value, 22 * but this can be done through a "refresh token" supported by most identity 23 * providers. Consult the documentation for the identity provider for refreshing 24 * tokens. Once the refreshed token is acquired, you should make sure to update 25 * this new token in the credentials object's {params} property. The following 26 * code will update the SAMLAssertion, assuming you have retrieved an updated 27 * token from the identity provider: 28 * 29 * ```javascript 30 * AWS.config.credentials.params.SAMLAssertion = updatedToken; 31 * ``` 32 * 33 * Future calls to `credentials.refresh()` will now use the new token. 34 * 35 * @!attribute params 36 * @return [map] the map of params passed to 37 * {AWS.STS.assumeRoleWithSAML}. To update the token, set the 38 * `params.SAMLAssertion` property. 39 */ 40 AWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, { 41 /** 42 * Creates a new credentials object. 43 * @param (see AWS.STS.assumeRoleWithSAML) 44 * @example Creating a new credentials object 45 * AWS.config.credentials = new AWS.SAMLCredentials({ 46 * RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole', 47 * PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal', 48 * SAMLAssertion: 'base64-token', // base64-encoded token from IdP 49 * }); 50 * @see AWS.STS.assumeRoleWithSAML 51 */ 52 constructor: function SAMLCredentials(params) { 53 AWS.Credentials.call(this); 54 this.expired = true; 55 this.params = params; 56 }, 57 58 /** 59 * Refreshes credentials using {AWS.STS.assumeRoleWithSAML} 60 * 61 * @callback callback function(err) 62 * Called when the STS service responds (or fails). When 63 * this callback is called with no error, it means that the credentials 64 * information has been loaded into the object (as the `accessKeyId`, 65 * `secretAccessKey`, and `sessionToken` properties). 66 * @param err [Error] if an error occurred, this value will be filled 67 * @see get 68 */ 69 refresh: function refresh(callback) { 70 var self = this; 71 self.createClients(); 72 if (!callback) callback = function(err) { if (err) throw err; }; 73 74 self.service.assumeRoleWithSAML(function (err, data) { 75 if (!err) { 76 self.service.credentialsFrom(data, self); 77 } 78 callback(err); 79 }); 80 }, 81 82 /** 83 * @api private 84 */ 85 createClients: function() { 86 this.service = this.service || new STS({params: this.params}); 87 } 88 89 });