Ich versuche Benutzereigenschaften abzurufen, die als OnAuthenticated Kontext und hinzugefügt als Ansprüche nach diesem Beispiel zurückgegeben werden: How to access Facebook private information by using ASP.NET Identity (OWIN)?Wie greife ich auf Microsoft.Owin.Security.xyz OnAuthenticated Kontext AddClaims Werte zu?
kann ich diese Daten sehen ich erwarte zurückgegeben wird bei der Anmeldung und als wird hinzugefügt Anspruch in Starup.Auth.cs. Aber wenn ich innerhalb des Account Controllers bin, werden die einzigen Ansprüche, die im UserManager oder UserStore erscheinen, von LOCAL AUTHORITY ausgegeben. Für Facebook (oder andere externe Anbieter) können keine Ansprüche erhoben werden. Woher kommen die zum Kontext hinzugefügten Ansprüche? (Ich verwende VS2013 RTM.)
Full Source und Live-Website auf Azure hier verlinkt: https://github.com/johndpalm/IdentityUserPropertiesSample/tree/VS2013rtm
Hier ist, was ich in Startup.Auth.cs haben:
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
{
AppId = ConfigurationManager.AppSettings.Get("FacebookAppId"),
AppSecret = ConfigurationManager.AppSettings.Get("FacebookAppSecret"),
Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
const string XmlSchemaString = "http://www.w3.org/2001/XMLSchema#string";
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"));
}
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook"));
return Task.FromResult(0);
}
}
};
facebookOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookOptions);
Eine alternative Art und Weise die externen Login-Eigenschaften einen einzigen Anspruch für den Zugriffstoken zu erfassen und mit Eigenschaften zu füllen hinzuzufügen wäre:
const string XmlSchemaString = "http://www.w3.org/2001/XMLSchema#string";
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions
{
AppId = ConfigurationManager.AppSettings.Get("FacebookAppId"),
AppSecret = ConfigurationManager.AppSettings.Get("FacebookAppSecret"),
Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
var claim = new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook");
foreach (var x in context.User)
{
string key = string.Format("urn:facebook:{0}", x.Key);
string value = x.Value.ToString();
claim.Properties.Add(key, value);
}
context.Identity.AddClaim(claim);
return Task.FromResult(0);
}
}
};
HINWEIS - Dieses Beispiel funktioniert nicht: Du Es wäre schön, eine einzelne Forderung mit Eigenschaften zu übergeben. Der externe Cookie scheint zu beachten, die Ansprüche Eigenschaften. Die Eigenschaften sind leer, wenn sie später von der Identität abgerufen werden.
Ich erhalte einen Google 404-Fehlercode bei der Verwendung Ihres Codes. Soweit ich das beurteilen kann, unterstützt Google dies nicht mehr, oauth2. –