39 votes

Comment puis-je ignorer l'Identité de Cadre magique et il suffit d'utiliser la OWIN auth middleware pour obtenir les réclamations j'ai chercher?

Le OWIN middleware trucs à intégrer tiers des connexions à votre ASP.NET l'app est très cool, mais je n'arrive pas à comprendre comment le détacher de la nouvelle structure d'ID qui remplace la merde Membres de l'API. Je ne suis pas intéressé par la persistance de la réclamation et les infos de l'utilisateur en EF à base de persistance des données, je veux juste que les revendications de l'info donc je peux l'appliquer à mon propre compte d'utilisateur dans les projets existants. Je ne veux pas adopter la nouvelle structure d'ID juste pour profiter de ce genre de choses.

J'ai été la navigation sur le code sur CodePlex, mais il y a tout un tas de statique de la magie. Pouvez-vous offrir des suggestions?

45voto

Hongye Sun Points 2275

Utilisez le code suivant pour l'installation OWIN de sécurité middlewares:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Application",
    AuthenticationMode = AuthenticationMode.Passive,
    LoginPath = new PathString("/Login"),
    LogoutPath = new PathString("/Logout"),
});

app.SetDefaultSignInAsAuthenticationType("External");

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "External",
    AuthenticationMode = AuthenticationMode.Passive,
    CookieName = CookieAuthenticationDefaults.CookiePrefix + "External",
    ExpireTimeSpan = TimeSpan.FromMinutes(5),
});

app.UseGoogleAuthentication();

Le code ci-dessus met en place l'application cookies, externes cookie et Google externe de connexion middlewares. Externe de connexion middleware va convertir externe connexion de l'utilisateur des données de l'identité et de la régler à l'externe cookie middleware. Dans votre application, vous avez besoin pour obtenir externes témoin de l'identité et de la convertir en externe connexion de données, vous pouvez vérifier avec votre base de données utilisateur.

Voici un exemple de code.

Connectez-vous avec cookie d'application:

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("Application");
identity.AddClaim(new Claim(ClaimTypes.Name, "<user name>"));
authentication.AuthenticationResponseGrant = new AuthenticationResponseGrant(identity, new AuthenticationProperties() { 
    IsPersistent = false
});

Obtenir cookie d'application de l'identité:

var identity = System.Web.HttpContext.Current.User as ClaimsIdentity;

Externes cookie identité (Google):

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication;
var result = await authentication.AuthenticateAsync("External");
var externalIdentity = result.Identity;

Extrait externe connexion de données à partir de l'identité:

public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
{
    if (identity == null)
    {
        return null;
    }

    Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

    if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)
        || String.IsNullOrEmpty(providerKeyClaim.Value))
    {
        return null;
    }

    if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
    {
        return null;
    }

    return new ExternalLoginData
    {
        LoginProvider = providerKeyClaim.Issuer,
        ProviderKey = providerKeyClaim.Value,
        UserName = identity.FindFirstValue(ClaimTypes.Name)
    };
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X