/// <summary>
 /// Gets a <see cref="SecurityToken"/> for the given audience and duration.
 /// </summary>
 /// <param name="appliesTo">The URI which the access token applies to</param>
 /// <param name="timeout">The time span that specifies the timeout value for the message that gets the security token</param>
 public Task <SecurityToken> GetTokenAsync(string appliesTo, string action, TimeSpan timeout)
 {
     TimeoutHelper.ThrowIfNegativeArgument(timeout);
     appliesTo = this.NormalizeAppliesTo(appliesTo);
     return(this.OnGetTokenAsync(appliesTo, action, timeout));
 }