protected override async Task <AuthenticationTicket> GetUserInformationAsync(AuthenticationProperties properties, TokenResponse tokens) { string graphAddress = Options.UserInformationEndpoint + "?access_token=" + Uri.EscapeDataString(tokens.AccessToken); if (Options.SendAppSecretProof) { graphAddress += "&appsecret_proof=" + GenerateAppSecretProof(tokens.AccessToken); } var graphResponse = await Backchannel.GetAsync(graphAddress, Context.RequestAborted); graphResponse.EnsureSuccessStatusCode(); string text = await graphResponse.Content.ReadAsStringAsync(); JObject user = JObject.Parse(text); var context = new FacebookAuthenticatedContext(Context, Options, user, tokens); var identity = new ClaimsIdentity( Options.AuthenticationScheme, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); if (!string.IsNullOrEmpty(context.Id)) { identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, context.Id, ClaimValueTypes.String, Options.AuthenticationScheme)); } if (!string.IsNullOrEmpty(context.UserName)) { identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, context.UserName, ClaimValueTypes.String, Options.AuthenticationScheme)); } if (!string.IsNullOrEmpty(context.Email)) { identity.AddClaim(new Claim(ClaimTypes.Email, context.Email, ClaimValueTypes.String, Options.AuthenticationScheme)); } if (!string.IsNullOrEmpty(context.Name)) { identity.AddClaim(new Claim("urn:facebook:name", context.Name, ClaimValueTypes.String, Options.AuthenticationScheme)); // Many Facebook accounts do not set the UserName field. Fall back to the Name field instead. if (string.IsNullOrEmpty(context.UserName)) { identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, context.Name, ClaimValueTypes.String, Options.AuthenticationScheme)); } } if (!string.IsNullOrEmpty(context.Link)) { identity.AddClaim(new Claim("urn:facebook:link", context.Link, ClaimValueTypes.String, Options.AuthenticationScheme)); } context.Properties = properties; context.Principal = new ClaimsPrincipal(identity); await Options.Notifications.Authenticated(context); return(new AuthenticationTicket(context.Principal, context.Properties, context.Options.AuthenticationScheme)); }
internal static async Task OnAuthenticated(FacebookAuthenticatedContext context) { if (context.Principal != null) { Helpers.ThrowIfConditionFailed(() => context.AccessToken == "ValidAccessToken", ""); Helpers.ThrowIfConditionFailed(() => context.Email == "*****@*****.**", ""); Helpers.ThrowIfConditionFailed(() => context.Id == "Id", ""); Helpers.ThrowIfConditionFailed(() => context.Link == "https://www.facebook.com/myLink", ""); Helpers.ThrowIfConditionFailed(() => context.Name == "AspnetvnextTest AspnetvnextTest", ""); Helpers.ThrowIfConditionFailed(() => context.UserName == "AspnetvnextTest.AspnetvnextTest.7", ""); Helpers.ThrowIfConditionFailed(() => context.User.SelectToken("id").ToString() == context.Id, ""); Helpers.ThrowIfConditionFailed(() => context.ExpiresIn.Value == TimeSpan.FromSeconds(100), ""); Helpers.ThrowIfConditionFailed(() => context.AccessToken == "ValidAccessToken", ""); context.Principal.Identities.First().AddClaim(new Claim("ManageStore", "false")); } await Task.FromResult(0); }
/// <summary> /// Invoked whenever Facebook succesfully authenticates a user. /// </summary> /// <param name="context">Contains information about the login session as well as the user <see cref="System.Security.Claims.ClaimsIdentity"/>.</param> /// <returns>A <see cref="Task"/> representing the completed operation.</returns> public virtual Task Authenticated(FacebookAuthenticatedContext context) { return(OnAuthenticated(context)); }
/// <summary> /// Invoked whenever Facebook succesfully authenticates a user. /// </summary> /// <param name="context">Contains information about the login session as well as the user <see cref="System.Security.Claims.ClaimsIdentity"/>.</param> /// <returns>A <see cref="Task"/> representing the completed operation.</returns> public virtual Task Authenticated(FacebookAuthenticatedContext context) { return OnAuthenticated(context); }