using System;
using System.Globalization;
using System.Net;
using System.ServiceModel;
using System.ServiceModel.Channels;
using DotNetOAuth;
using DotNetOAuth.ChannelElements;
using DotNetOAuth.Messaging;
using SampleServiceProvider;
///
/// Sample consumer of our Service Provider sample's WCF service.
///
public partial class SampleWcf : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
if (Session["WcfTokenManager"] != null) {
Consumer consumer = this.CreateConsumer();
var accessTokenMessage = consumer.ProcessUserAuthorization();
if (accessTokenMessage != null) {
Session["WcfAccessToken"] = accessTokenMessage.AccessToken;
authorizationLabel.Text = "Authorized! Access token: " + accessTokenMessage.AccessToken;
}
}
}
}
protected void getAuthorizationButton_Click(object sender, EventArgs e) {
Consumer consumer = this.CreateConsumer();
consumer.RequestUserAuthorization().Send();
}
protected void getNameButton_Click(object sender, EventArgs e) {
nameLabel.Text = CallService(client => client.GetName());
}
protected void getAgeButton_Click(object sender, EventArgs e) {
int age = CallService(client => client.GetAge());
ageLabel.Text = age.ToString(CultureInfo.CurrentCulture);
}
private T CallService(Func predicate) {
DataApiClient client = new DataApiClient();
var serviceEndpoint = new MessageReceivingEndpoint(client.Endpoint.Address.Uri, HttpDeliveryMethod.AuthorizationHeaderRequest | HttpDeliveryMethod.PostRequest);
var accessToken = Session["WcfAccessToken"] as string;
Consumer consumer = this.CreateConsumer();
WebRequest httpRequest = consumer.CreateAuthorizedRequest(serviceEndpoint, accessToken);
HttpRequestMessageProperty httpDetails = new HttpRequestMessageProperty();
httpDetails.Headers[HttpRequestHeader.Authorization] = httpRequest.Headers[HttpRequestHeader.Authorization];
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) {
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpDetails;
return predicate(client);
}
}
private Consumer CreateConsumer() {
string consumerKey = "sampleconsumer";
string consumerSecret = "samplesecret";
var tokenManager = Session["WcfTokenManager"] as InMemoryTokenManager;
if (tokenManager == null) {
tokenManager = new InMemoryTokenManager(consumerKey, consumerSecret);
Session["WcfTokenManager"] = tokenManager;
}
MessageReceivingEndpoint oauthEndpoint = new MessageReceivingEndpoint(
new Uri("http://localhost:65169/ServiceProvider/OAuth.ashx"),
HttpDeliveryMethod.PostRequest);
Consumer consumer = new Consumer(
new ServiceProviderDescription {
RequestTokenEndpoint = oauthEndpoint,
UserAuthorizationEndpoint = oauthEndpoint,
AccessTokenEndpoint = oauthEndpoint,
TamperProtectionElements = new DotNetOAuth.Messaging.ITamperProtectionChannelBindingElement[] {
new HmacSha1SigningBindingElement(),
},
},
tokenManager) {
ConsumerKey = consumerKey,
ConsumerSecret = consumerSecret,
};
return consumer;
}
}