Skip to content

Instantly share code, notes, and snippets.

@matejskubic
Created June 22, 2012 14:41
Show Gist options
  • Save matejskubic/2973139 to your computer and use it in GitHub Desktop.
Save matejskubic/2973139 to your computer and use it in GitHub Desktop.
Twitter Token Service
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.IO;
using System.Web.Mvc;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using Twitterizer;
using Microsoft.IdentityModel.Protocols.WSFederation;
using Microsoft.IdentityModel.SecurityTokenService;
using Microsoft.IdentityModel.Web;
using Web.Core;
namespace Web.TwitterSts.Controllers
{
public class HomeController : Controller
{
public ActionResult Index(string oauth_token, string oauth_verifier)
{
string action = Request.QueryString[WSFederationConstants.Parameters.Action];
string domainUrl = Url.AbsoluteAction(string.Empty, string.Empty);
if (action == WSFederationConstants.Actions.SignIn && !string.IsNullOrEmpty(oauth_token) && !string.IsNullOrEmpty(oauth_verifier))
{
var tokens = OAuthUtility.GetAccessToken(
ConfigurationManager.AppSettings["TwitterConsumerKeyFor-" + domainUrl],
ConfigurationManager.AppSettings["TwitterConsumerSecretFor-" + domainUrl],
oauth_token,
oauth_verifier);
TwitterResponse<TwitterUser> user = TwitterUser.Show(new OAuthTokens() { AccessToken = tokens.Token,
AccessTokenSecret = tokens.TokenSecret,
ConsumerKey = ConfigurationManager.AppSettings["TwitterConsumerKeyFor-" + domainUrl],
ConsumerSecret = ConfigurationManager.AppSettings["TwitterConsumerSecretFor-" + domainUrl]
}, tokens.ScreenName);
SignInRequestMessage requestMessage = (SignInRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
if (user != null)
{
Microsoft.IdentityModel.SecurityTokenService.SecurityTokenService sts = new CustomSecurityTokenService(CustomSecurityTokenServiceConfiguration.Current(Url.AbsoluteAction("", "")), user);
SignInResponseMessage responseMessage = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(requestMessage, User, sts);
return new ContentResult
{
Content = responseMessage.WriteFormPost()
};
}
else
{
throw new UnauthorizedAccessException();
}
}
else if (action == WSFederationConstants.Actions.SignOut)
{
SignOutRequestMessage signoutMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
if (!string.IsNullOrWhiteSpace(signoutMessage.Reply))
{
return Redirect(signoutMessage.Reply);
}
System.Web.Security.FormsAuthentication.SignOut();
}
string token = OAuthUtility.GetRequestToken(
ConfigurationManager.AppSettings["TwitterConsumerKeyFor-" + domainUrl],
ConfigurationManager.AppSettings["TwitterConsumerSecretFor-" + domainUrl],
Request.Url.OriginalString).Token;
return Redirect(OAuthUtility.BuildAuthorizationUri(token, true).ToString());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment