14 October 2012 HowTo, MVC4, OAuth, Twitter Robert Muehsig

Ich hatte bereits vor einiger Zeit über die Authentifizierung mit Twitter gebloggt. Mit ASP.NET MVC 4 kommen das DotNetOpenAuth NuGet Packages mit, welches die reine Authentifzieren deutlich vereinfachen.

ASP.NET MVC 4 – Membership & co.

image

Wer eine ganz normale MVC 4 WebApp erstellen möchte findet danach direkt einen “AccountController” und mehrere Klassen in der “AccountModels.cs”.

 

 

 

 

 

 

 

 

 

 

Twitter Login in RavenDB, MongoDB oder sonstwas abspeichern

Ich muss zugeben: Das gesamte Membership System hat mich vor mehreren Jahren ziemlich enttäuscht, sodass ich gar keine Zeit mehr darin investieren möchte. Zwar gibt es jetzt SimpleMembership & co., aber irgendwie sieht der AccountController schonmal nicht “simpel” aus und da ich meist selbst “Herr der Daten” sein möchte empfand ich das Membership System immer als Bevormundung.

Dazu kommt, dass ich die Login-Daten nicht in ein SQL Server pumpen will, sondern in RavenDB oder in mein eigenes Format.

Lösung: Selbst DotNetOpenAuth verwenden

Mit ASP.NET MVC wird auch das DotNetOpenAuth NuGet Package installiert, welches diverse Provider mitbringt. Das kann man natürlich auch direkt ansprechen - ohne die WebSecurity oder Membership Sachen von ASP.NET.

public class TwitterLoginController : Controller
    {
        // Callback after Twitter Login
        public ActionResult Callback()
        {
            DotNetOpenAuth.AspNet.Clients.TwitterClient client = new TwitterClient(ConfigurationManager.AppSettings["twitterConsumerKey"], ConfigurationManager.AppSettings["twitterConsumerSecret"]);

            var result = client.VerifyAuthentication(this.HttpContext);

            return RedirectToAction("Index", "Home");
        }

        // Point Login URL to this Action
        public ActionResult Login()
        {
            DotNetOpenAuth.AspNet.Clients.TwitterClient client = new TwitterClient(ConfigurationManager.AppSettings["twitterConsumerKey"], ConfigurationManager.AppSettings["twitterConsumerSecret"]);

            UrlHelper helper = new UrlHelper(this.ControllerContext.RequestContext);
            var result = helper.Action("Callback", "TwitterLogin", null, "http");

            client.RequestAuthentication(this.HttpContext, new Uri(result));

            return new EmptyResult();
        }
    }

Wie man die Twitter Keys beschafft habe ich hier bereits beschrieben. Ansonsten gibt es auch Hilfe direkt auf der Twitter Dev Seite.

Nach dem erfolgreichen Login bekommt man dies als “result”:

image

Auf Twitter Posten über den TwitterClient?

Wichtig hier anzumerken: Der TwitterClient in dem DotNetOpenAuth Projekt übernimmt nur die Authentifzierung. Wer eine Authroisierung und Tweets posten möchte der sollte sich das DotNetOpenAuth ApplicationBlock NuGet Package anschauen. Stichwort ist “TwitterConsumer” und die Implementierung eines eigenen Stores für die Keys.

[ Source Code auf GitHub ]


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de