//step 2.3 //making AuthenticationTicket after client return from Vk.com //here we make actually autorization work protected override async Task <AuthenticationTicket> AuthenticateCoreAsync() { AuthenticationProperties properties = null; try { string code = ""; IReadableStringCollection query = Request.Query; IList <string> values = query.GetValues("code"); if (values != null && values.Count == 1) { code = values[0]; } properties = Options.StateDataFormat.Unprotect(Options.StoreState); if (properties == null) { return(null); } // OAuth2 10.12 CSRF if (!ValidateCorrelationId(properties, _logger)) { return(new AuthenticationTicket(null, properties)); } string requestPrefix = Request.Scheme + Uri.SchemeDelimiter + Request.Host; string redirectUri = requestPrefix + Request.PathBase + Options.CallbackPath; //https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI string tokenRequest = TokenEndpoint + "?client_id=" + Uri.EscapeDataString(Options.ClientId) + "&client_secret=" + Uri.EscapeDataString(Options.ClientSecret) + "&code=" + Uri.EscapeDataString(code) + "&redirect_uri=" + Uri.EscapeDataString(redirectUri); HttpResponseMessage tokenResponse = await _httpClient.GetAsync(tokenRequest, Request.CallCancelled); tokenResponse.EnsureSuccessStatusCode(); string text = await tokenResponse.Content.ReadAsStringAsync(); var JsonResponse = JsonConvert.DeserializeObject <dynamic>(text); string accessToken = JsonResponse["access_token"]; string expires = JsonResponse["expires_in"]; string userid = JsonResponse["user_id"]; string email = JsonResponse["email"]; //public method which dont require token string userInfoLink = GraphApiEndpoint + "users.get.xml" + "?user_ids=" + Uri.EscapeDataString(userid) + "&fields=" + Uri.EscapeDataString("nickname,screen_name,photo_50"); HttpResponseMessage graphResponse = await _httpClient.GetAsync(userInfoLink, Request.CallCancelled); graphResponse.EnsureSuccessStatusCode(); text = await graphResponse.Content.ReadAsStringAsync(); var UserInfoResponseXml = new XmlDocument(); UserInfoResponseXml.LoadXml(text); var context = new VkAuthenticatedContext(Context, UserInfoResponseXml, accessToken, expires); context.Identity = new ClaimsIdentity( Options.AuthenticationType, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); context.Identity.AddClaim(new Claim("urn:vkontakte:accesstoken", context.AccessToken, XmlSchemaString, Options.AuthenticationType)); if (!string.IsNullOrEmpty(context.Id)) { context.Identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, context.Id, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.DefaultName)) { context.Identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, context.DefaultName, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.FullName)) { context.Identity.AddClaim(new Claim("urn:vkontakte:name", context.FullName, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(context.Link)) { context.Identity.AddClaim(new Claim("urn:vkontakte:link", context.Link, XmlSchemaString, Options.AuthenticationType)); } if (!string.IsNullOrEmpty(email)) { context.Identity.AddClaim(new Claim(ClaimTypes.Email, email, 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)); }
public virtual Task Authenticated(VkAuthenticatedContext context) { return OnAuthenticated(context); }
public virtual Task Authenticated(VkAuthenticatedContext context) { return(OnAuthenticated(context)); }