public virtual Task Authenticated(FoursquareAuthenticatedContext context) { return OnAuthenticated(context); }
public virtual Task Authenticated(FoursquareAuthenticatedContext context) { return(OnAuthenticated(context)); }
protected override async Task <AuthenticationTicket> AuthenticateCoreAsync() { AuthenticationProperties properties = null; try { string code = null; string state = null; IReadableStringCollection query = Request.Query; IList <string> values = query.GetValues("code"); if (values != null && values.Count == 1) { code = values[0]; } state = Request.Cookies["state_value"]; properties = Options.StateDataFormat.Unprotect(state); if (properties == null) { return(null); } // OAuth2 10.12 CSRF if (!ValidateCorrelationId(properties, _logger)) { return(new AuthenticationTicket(null, properties)); } string requestPrefix = Request.Scheme + "://" + Request.Host; string redirectUri = requestPrefix + Request.PathBase + Options.CallbackPath; string tokenRequest = "grant_type=authorization_code" + "&code=" + Uri.EscapeDataString(code) + "&redirect_uri=" + Uri.EscapeDataString(redirectUri) + "&client_id=" + Uri.EscapeDataString(Options.ClientId) + "&client_secret=" + Uri.EscapeDataString(Options.ClientSecret); HttpResponseMessage tokenResponse = await _httpClient.GetAsync(TokenEndpoint + "?" + tokenRequest, Request.CallCancelled); tokenResponse.EnsureSuccessStatusCode(); string text = await tokenResponse.Content.ReadAsStringAsync(); JObject form = JObject.Parse(text); JToken accessToken = null; foreach (var x in form) { if (x.Key == "access_token") { accessToken = x.Value; } } string expires = "5183999"; HttpResponseMessage graphResponse = await _httpClient.GetAsync( ApiEndpoint + "?oauth_token=" + Uri.EscapeDataString(accessToken.ToString()) + "&v=20131201", Request.CallCancelled); graphResponse.EnsureSuccessStatusCode(); text = await graphResponse.Content.ReadAsStringAsync(); JObject result = JObject.Parse(text); JToken response = result["response"]; JObject user = response["user"] as JObject; var context = new FoursquareAuthenticatedContext(Context, user, accessToken.ToString(), expires); context.Identity = new ClaimsIdentity( Options.AuthenticationType, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); if (!string.IsNullOrEmpty(context.Id)) { context.Identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, context.Id, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.LastName) && !string.IsNullOrEmpty(context.FirstName)) { context.Identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, string.Format("{0} {1}", context.FirstName, context.LastName), XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.Email)) { context.Identity.AddClaim(new Claim(ClaimTypes.Email, context.Email, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.FirstName)) { context.Identity.AddClaim(new Claim("urn:foursquare:name", context.FirstName, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.Url)) { context.Identity.AddClaim(new Claim("urn:foursquare:url", context.Url, XmlSchemaString, Options.AuthenticationType)); } context.Properties = properties; await Options.Provider.Authenticated(context); return(new AuthenticationTicket(context.Identity, context.Properties)); } catch (Exception ex) { _logger.WriteError(ex.Message); } return(new AuthenticationTicket(null, properties)); }