namespace OAuthAuthorizationServer.Code { using System; using System.Collections.Generic; using DotNetOpenAuth.OAuth2; /// /// An OAuth 2.0 Client that has registered with this Authorization Server. /// public partial class Client : IClientDescription { #region IConsumerDescription Members /// /// Gets the client secret. /// string IClientDescription.Secret { get { return this.ClientSecret; } } /// /// Gets the callback to use when an individual authorization request /// does not include an explicit callback URI. /// /// /// An absolute URL; or null if none is registered. /// Uri IClientDescription.DefaultCallback { get { return string.IsNullOrEmpty(this.Callback) ? null : new Uri(this.Callback); } } /// /// Gets the type of the client. /// ClientType IClientDescription.ClientType { get { return (ClientType)this.ClientType; } } /// /// Determines whether a callback URI included in a client's authorization request /// is among those allowed callbacks for the registered client. /// /// The absolute URI the client has requested the authorization result be received at. /// /// true if the callback URL is allowable for this client; otherwise, false. /// bool IClientDescription.IsCallbackAllowed(Uri callback) { if (string.IsNullOrEmpty(this.Callback)) { // No callback rules have been set up for this client. return true; } // In this sample, it's enough of a callback URL match if the scheme and host match. // In a production app, it is advisable to require a match on the path as well. Uri acceptableCallbackPattern = new Uri(this.Callback); if (string.Equals(acceptableCallbackPattern.GetLeftPart(UriPartial.Authority), callback.GetLeftPart(UriPartial.Authority), StringComparison.Ordinal)) { return true; } return false; } #endregion } }