/// <summary> /// <para> /// Constructs an instance of StoredProfileFederatedCredentials. After construction call one of the Authenticate /// methods to authenticate the user/process and obtain temporary AWS credentials. /// </para> /// <para> /// For users who are domain joined (the role profile does not contain user identity information) the temporary /// credentials will be refreshed automatically as needed. Non domain-joined users (those with user identity /// data in the profile) are required to re-authenticate when credential refresh is required. An exception is /// thrown when attempt is made to refresh credentials in this scenario. The consuming code of this class /// should catch the exception and prompt the user for credentials, then call Authenticate to re-initialize /// with a new set of temporary AWS credentials. /// </para> /// </summary> /// <param name="profileName"> /// The name of the profile holding the necessary role data to enable authentication and credential generation. /// </param> /// <param name="profilesLocation">Reserved for future use.</param> /// <param name="proxySettings"> /// Null or proxy settings to be used during the HHTPS authentication calls when generating credentials. /// /// </param> /// <remarks>The ini-format credentials file is not currently supported for SAML role profiles.</remarks> public StoredProfileFederatedCredentials(string profileName, string profilesLocation, WebProxy proxySettings) { this._proxySettings = proxySettings; this.PreemptExpiryTime = _preemptExpiryTime; var lookupName = string.IsNullOrEmpty(profileName) ? StoredProfileCredentials.DEFAULT_PROFILE_NAME : profileName; ProfileName = lookupName; ProfilesLocation = null; // If not overriding the credentials lookup location check the SDK Store for credentials. If // an override location is specified, assume we should only use the shared credential file. if (string.IsNullOrEmpty(profilesLocation)) { if (ProfileManager.IsProfileKnown(lookupName) && SAMLRoleProfile.CanCreateFrom(lookupName)) { var profileData = ProfileManager.GetProfile <SAMLRoleProfile>(lookupName); ProfileData = profileData; var logger = Logger.GetLogger(typeof(StoredProfileFederatedCredentials)); logger.InfoFormat("SAML role profile found using account name {0} and looking in SDK account store.", lookupName); } } // we currently do not support the shared ini-format credential file for SAML role profile data // so end the search now if not found if (ProfileData == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Profile '{0}' was not found or could not be loaded from the SDK credential store. Verify that the profile name and data are correct.", profileName); throw new ArgumentException(msg); } }
/// <summary> /// Tests if an instance can be created from the persisted profile data. /// </summary> /// <param name="profileName">The name of the profile to test.</param> /// <param name="profilesLocation">The location of the shared ini-format credential file.</param> /// <returns>True if the persisted data would yield a valid credentials instance.</returns> /// <remarks> /// This profile type is currently only supported in the SDK credential store file. /// The shared ini-format file is not currently supported; any value supplied /// for the profilesLocation value is ignored. /// </remarks> public static bool CanCreateFrom(string profileName, string profilesLocation) { if (string.IsNullOrEmpty(profilesLocation) && ProfileManager.IsProfileKnown(profileName)) { return(SAMLRoleProfile.CanCreateFrom(profileName)); } return(false); }