Question

Je suis implémentant le nouveau cadre ASP.NET IDENTITY 2.0 dans un site Web existant utilise l'esprit d'identité de CA qui utilise principalement la demande.Servervariables pour alimenter toutes les commandes.

Ce que j'essaie de faire est de remplir les en-têtes de requête avec les mêmes variables que CA se trouve sur chaque demande de l'événement BeginRequest avec un gestionnaire HTTP, mais en utilisant le nouveau fournisseur d'identité.

Je sais que dans l'événement de débutant, j'ai accès à lire des cookies du client et je sais que je peux vérifier si le cookie Owin est là (nommé .aspnet.applicationcookie) mais je ne sais pas comment je peux déchiffrer le cookie pour obtenir les revendications.

J'ai également essayé de faire cela pour lire les revendications suivantes:

Dim identity = CType(Thread.CurrentPrincipal, ClaimsPrincipal)
Dim claim = identity.Claims.SingleOrDefault(Function(c) c.Type = ClaimTypes.Name)

Quand je le fais, cependant, je ne reçois rien pour la valeur, donc je suppose que le fil de fil de temps n'est pas renseigné ce tôt dans le pipeline de demande.

Ce code fonctionne, cependant

Dim application As HttpApplication = DirectCast(sender, HttpApplication)
Dim cookie = application.Context.Request.Cookies(".AspNet.ApplicationCookie")
If cookie Is Nothing Then
    HttpContext.Current.Request.Headers.Add("SM_SERVERSESSIONID", "NOT Logged in")
Else
    HttpContext.Current.Request.Headers.Add("SM_SERVERSESSIONID", "Logged in")
End If

Alors, étant donné que j'ai accès au cookie, je me demandais s'il y avait une façon de le déchiffrer afin que je puisse lire les affirmations que je mets à l'intérieur.

Voici comment je définit mes affirmations sur la page de connexion:

Dim claims = New List(Of Claim)()
claims.Add(New Claim(ClaimTypes.Name, user.UserName))
claims.Add(New Claim(ClaimTypes.Email, user.Email))
Dim id = New ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie)
authenticationManager.SignIn(id)

Était-ce utile?

La solution

Vous n'avez pas besoin de déchiffrer le cookie par vous-même. Il vous suffit de vérifier si l'utilisateur est autorisé et que vous obtiendrez des réclamations existantes.

S'il vous plaît, essayez quelque chose comme ceci:

var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
    Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);
    if (providerKeyClaim != null)
    {
        var name = claimsIdentity.FindFirstValue(ClaimTypes.Name);
        var email = claimsIdentity.FindFirstValue(ClaimTypes.Email);
    }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top