//----------------------------------------------------------------------- // // Copyright (c) Outercurve Foundation. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; using System.Linq; using System.Text; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; /// /// A message sent from the client to the authorization server to exchange a previously obtained grant for an access token. /// public abstract class AccessTokenRequestBase : AuthenticatedClientRequestBase, IAccessTokenRequest { /// /// Initializes a new instance of the class. /// /// The Authorization Server's access token endpoint URL. /// The version. protected AccessTokenRequestBase(Uri tokenEndpoint, Version version) : base(tokenEndpoint, version) { this.HttpMethods = HttpDeliveryMethods.PostRequest; } /// /// Gets the scope of operations the client is allowed to invoke. /// HashSet IAccessTokenRequest.Scope { get { return this.RequestedScope; } } /// /// Gets a value indicating whether the client requesting the access token has authenticated itself. /// /// /// Always true, because of our base class. /// bool IAccessTokenRequest.ClientAuthenticated { get { return true; } } /// /// Gets the type of the grant. /// /// The type of the grant. [MessagePart(Protocol.grant_type, IsRequired = true, Encoder = typeof(GrantTypeEncoder))] internal abstract GrantType GrantType { get; } /// /// Gets the scope of operations the client is allowed to invoke. /// protected abstract HashSet RequestedScope { get; } /// /// Checks the message state for conformity to the protocol specification /// and throws an exception if the message is invalid. /// /// /// Some messages have required fields, or combinations of fields that must relate to each other /// in specialized ways. After deserializing a message, this method checks the state of the /// message to see if it conforms to the protocol. /// Note that this property should not check signatures or perform any state checks /// outside this scope of this particular message. /// /// Thrown if the message is invalid. protected override void EnsureValidMessage() { base.EnsureValidMessage(); ErrorUtilities.VerifyProtocol( DotNetOpenAuthSection.Messaging.RelaxSslRequirements || this.Recipient.IsTransportSecure(), OAuthStrings.HttpsRequired); } } }