La première opération est de récupérer une librairie supportant OAuth2. Ici, j'ai fait le choix de prendre DotNetOpenAuth en version bêta (supportant donc OAuth 2).
La seconde opération est d'aller sur le site de foursquare et d'enregistrer son application afin d'obtenir une clé. Il est très important de correctement définir l'adresse url du site sur lequel on ajoute la fonctionnalité ou le processus d'authentification ne fonctionnera pas!
Le moment est venu d'implémenter notre code sur notre site. Nous allons donc aller dans notre page de login dans le controlleur Account. Nous ajoutons une image (le logo de foursquare) ainsi qu'une action dessus. Lorsque l'utilisateur cliquera sur l'image, l'action "LogOnFoursquare" s'exécutera.
<a href="@Url.Action("LogOnFoursquare", "Account")"> <img src="@Url.Content("~/Images/foursquare_logo.png")" alt="" style="height:30px;width:100px" /></a>
Il est donc maintenant possible de créer la méthode (vide) demandant un token et envoyant l'url de retour. Avec cette classe, j'ai la possibilité de terminer ma méthode "LogOnFoursquare".
private static readonly FoursquareConnect foursquare = new FoursquareConnect("clientID", "secretID"); public ActionResult LogOnFoursquare() { var url = string.Format("{0}://{1}/Account/OAuthFoursquare", Request.Url.Scheme, Request.Url.Authority); foursquare.RequestUserAuthorization(url); return null; } public ActionResult OAuthFoursquare() { OAuthUser user = foursquare.ProcessUserAuthorization(); CreateAuthCookie(user); return RedirectToAction("Index", "Home"); }
private static readonly AuthorizationServerDescription FoursquareServiceDescription = new AuthorizationServerDescription { AuthorizationEndpoint = new Uri("https://fr.foursquare.com/oauth2/authorize"), TokenEndpoint = new Uri("https://fr.foursquare.com/oauth2/access_token"), ProtocolVersion = DotNetOpenAuth.OAuth2.ProtocolVersion.V20 };
public void RequestUserAuthorization(string url) { DotNetOpenAuth.OAuth2.WebServerClient client = new WebServerClient(FoursquareServiceDescription) { ClientIdentifier = clientIdentifier, ClientSecret = clientSecret }; client.RequestUserAuthorization(returnTo: new Uri(url)); }
public OAuthUser ProcessUserAuthorization() { DotNetOpenAuth.OAuth2.WebServerClient client = new WebServerClient(FoursquareServiceDescription) { ClientIdentifier = clientIdentifier, ClientSecret = clientSecret }; var result = client.ProcessUserAuthorization(); return GetUser(result.AccessToken); }
private OAuthUser GetUser(string token) { HttpClient request = new HttpClient(); var response = request.Get("https://api.foursquare.com/v2/users/self?oauth_token=" + token); JObject obj = (JObject)JsonConvert.DeserializeObject(response.Content.ReadAsString()); return new OAuthUser { Id = (string)obj.SelectToken("response.user.id"), UserName = (string)obj.SelectToken("response.user.firstName") + " " + (string)obj.SelectToken("response.user.lastName"), AccessToken = token, UserType = UserType.Foursquare }; }