public async Task <IHttpActionResult> GetGitHubToken(string githubCode) { var config = GitHubAuthorizationConfiguration.CreateDefault(); string responseString = ""; using (var webClient = new WebClient()) { webClient.Headers.Add("Accept", "application/json"); responseString = webClient.UploadString(config.GetTokenEndpoint(), config.GetTokenEndpointParameters(githubCode)); } var responseDefiniton = new { token_type = "", scope = "", access_token = "" }; var response = JsonConvert.DeserializeAnonymousType(responseString, responseDefiniton); var accessToken = response.access_token; string userInformationString = ""; using (var webClient = new WebClient()) { webClient.Headers.Add("Accept", "application/json"); // Set a User-Agent ... any User-Agent..... , otherwise receive a 403 Unauthorized.... yup! webClient.Headers.Add("User-Agent", "Y U require this header, github? this cost me some 30 minutes!"); userInformationString = webClient.DownloadString(string.Format("https://api.github.com/user?access_token={0}", accessToken)); } ApplicationUser user = JsonConvert.DeserializeObject <ApplicationUser>(userInformationString); user.CheckAndRepairUselessRequiredFields(); ApplicationUser exisitingUser = await UserManager.FindByNameAsync(user.UserName); if (exisitingUser != null) { exisitingUser.AvatarUrl = user.AvatarUrl; exisitingUser.Email = user.Email; exisitingUser.GitHubId = user.GitHubId; exisitingUser.HtmlUrl = user.HtmlUrl; exisitingUser.RepositoriesUrl = user.RepositoriesUrl; exisitingUser.Url = user.Url; IdentityResult idr = await UserManager.UpdateAsync(exisitingUser); } else { await UserManager.CreateAsync(user); exisitingUser = await UserManager.FindByNameAsync(user.UserName); } await AddExternalLogin(exisitingUser, accessToken); ClaimsIdentity oAuthIdentity = await exisitingUser.GenerateUserIdentityAsync(UserManager, DefaultAuthenticationTypes.ExternalBearer); AuthenticationProperties authProperties = ApplicationOAuthProvider.CreateProperties(exisitingUser.UserName); oAuthIdentity.AddClaims(new Claim[] { new Claim(ClaimTypes.NameIdentifier, accessToken), new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"), new Claim(ClaimTypes.Name, exisitingUser.UserName), new Claim("Certificate", accessToken), }); Authentication.SignIn(new AuthenticationProperties { IsPersistent = false, }, oAuthIdentity); return(Ok(new { Token = accessToken, user = exisitingUser })); }
public IHttpActionResult GetAuthorizationConfiguration() { return(Json(GitHubAuthorizationConfiguration.CreateDefault())); }