Pregunta

Estoy implementando el nuevo marco de Identity 2.0 de ASP.NET en un sitio web existente utiliza la Minder de Identidad de CA que utiliza principalmente la solicitud. Servvariables para alimentar todos los controles.

Lo que estoy tratando de hacer es rellenar los encabezados de solicitud con las mismas variables que CA lo hace en cada solicitud en el evento PrincipianteRequest con un manejador HTTP, pero utilizando el nuevo proveedor de identidad.

Sé que en el evento de PrincipopRequest tengo acceso a las cookies de lectura del cliente, y sé que puedo verificar si la cookie de Owin está allí (llamada .aspnet.applicationcookie) pero no sé cómo puedo descifrar La cookie para obtener las reclamaciones fuera de ella.

También he intentado hacer esto para leer las reclamaciones:

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

Cuando hago esto, sin embargo, no obtengo nada por el valor, así que asumo que el hilo. Currentprincipal no se rellena esto temprano en la pipa de solicitud.

Este código funciona, sin embargo,

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

Por lo tanto, considerando que tengo acceso a la cookie, me preguntaba si había alguna forma de que pudiera descifrarlo, así que puedo leer las afirmaciones que he establecido dentro de ella.

Aquí es cómo estoy configurando mis reclamaciones en la página de inicio de sesión:

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)

¿Fue útil?

Solución

No necesitas descifrar la cookie por ti mismo. Solo necesita verificar si el usuario está autorizado y existen reclamaciones.

Por favor, prueba algo como esto:

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);
    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top