Wie erhalte ich Zugang zu Microsoft.Owin.Sicherheit.xyz OnAuthenticated Kontext AddClaims Werte?

Ich versuche, das abrufen von Benutzer-Eigenschaften zurückgegeben werden, wie die OnAuthenticated Kontext und fügte hinzu, als Ansprüche nach diesem Beispiel: Wie der Zugriff auf Facebook private Informationen mit ASP.NET Identität (OWIN)?

Kann ich sehen, dass Daten, die ich erwarte wird zurückgegeben bei der Anmeldung und wird nun als Forderung im Startup.Auth.cs. Aber, wenn ich in den Konto-Controller, der nur behauptet, erscheint im UserManager oder UserStore ist, ausgestellt von der LOKALEN BEHÖRDE. Keine Ansprüche können gefunden werden bei Facebook (oder anderen externen Anbietern). Wo kommen die Forderungen Hinzugefügt Kontext am Ende? (Ich verwende VS2013 RTM.)

Vollständige Quelle und die live-Website auf Azure hier verlinkt: https://github.com/johndpalm/IdentityUserPropertiesSample/tree/VS2013rtm

Hier ist, was ich im Systemstart.Auth.cs:

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 Methode zur Erfassung der externen login-Eigenschaften wäre, einen einzigen Anspruch für den access-token und füllen es mit Eigenschaften:

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: Obwohl es schön wäre, um einen einzigen Anspruch mit Eigenschaften. Die externe cookie scheint zu beachten, zu Ehren der Ansprüche Eigenschaften. Die Eigenschaften sind leer, wenn das abrufen von Ihnen später von der Identität.

InformationsquelleAutor der Frage John Palmer | 2013-10-18

Schreibe einen Kommentar