, .
Claims, , Facebook, .
OnAuthenticated = (context) =>
{
const string XmlSchemaString = "http://www.w3.org/2001/XMLSchema#string";
var rawUserObjectFromFacebookAsJson = context.User;
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook"));
foreach (var x in context.User)
{
var claimType = string.Format("urn:facebook:{0}", x.Key);
string claimValue = x.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, XmlSchemaString, "Facebook"));
}
return Task.FromResult(0);
}
,
ClaimsIdentity identity = await HttpContext.GetOwinContext().Authentication
.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
ClaimsIdentity identity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var user = new IdentityUser()
{
Id = identity.GetUserId(),
UserName = identity.Name,
};
await LoginAsync(user, identity);
if (!identity.IsAuthenticated)
{
return RedirectToAction("Login");
}
return RedirectToAction("Index", "Home");
}
LoginAsync
private async Task LoginAsync(IdentityUser user, ClaimsIdentity identity)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
var userIdentity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
foreach (var claim in identity.Claims)
{
if (!userIdentity.HasClaim(c => c.Type == claim.Type))
userIdentity.AddClaim(claim);
}
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, userIdentity);
}
HttpContext.GetOwinContext().Authentication.User.Claims
, .