He estado usando la biblioteca JWT para decodificar un Json Web Token y me gustaría cambiar a la implementación oficial de JWT de Microsoft, System.IdentityModel.Tokens.Jwt .
La documentación es muy escasa, por lo que me cuesta trabajo averiguar cómo lograr lo que he estado haciendo con la biblioteca JWT. Con la biblioteca JWT, existe un método Decode que toma el JWT codificado en base64 y lo convierte en JSON, que luego puede deserializarse. Me gustaría hacer algo similar usando System.IdentityModel.Tokens.Jwt, pero después de una buena cantidad de excavación, no puedo averiguar cómo.
Por lo que vale, estoy leyendo el token JWT de una cookie, para usar con el marco de identidad de Google.
Cualquier ayuda sería apreciada.

Respuestas:
Dentro del paquete hay una clase llamada
JwtSecurityTokenHandlerque deriva deSystem.IdentityModel.Tokens.SecurityTokenHandler. En WIF, esta es la clase principal para deserializar y serializar tokens de seguridad.La clase tiene un
ReadToken(String)método que tomará su cadena JWT codificada en base64 y devuelve unSecurityTokenque representa el JWT.El
SecurityTokenHandlertambién tiene unValidateToken(SecurityToken)método que lleva suSecurityTokeny crea unaReadOnlyCollection<ClaimsIdentity>. Por lo general, para JWT, esto contendrá un soloClaimsIdentityobjeto que tiene un conjunto de reclamos que representan las propiedades del JWT original.JwtSecurityTokenHandlerdefine algunas sobrecargas adicionalesValidateToken, en particular, tiene unaClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)sobrecarga. ElTokenValidationParametersargumento le permite especificar el certificado de firma del token (como una lista deX509SecurityTokens). También tiene una sobrecarga que toma el JWT comostringunSecurityToken.El código para hacer esto es bastante complicado, pero se puede encontrar en el código (
TokenValidationHandlerclase) Global.asax.cx en la muestra del desarrollador llamada "ADAL - Aplicación nativa al servicio REST - Autenticación con ACS a través del cuadro de diálogo del navegador", ubicado enhttp://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
Alternativamente, la
JwtSecurityTokenclase tiene métodos adicionales que no están en laSecurityTokenclase base , como unaClaimspropiedad que obtiene las notificaciones contenidas sin pasar por laClaimsIdentitycolección. También tiene unaPayloadpropiedad que devuelve unJwtPayloadobjeto que le permite obtener el JSON sin procesar del token. Depende de su escenario cuál es el enfoque más adecuado.La documentación general (es decir, no específica de JWT) para la
SecurityTokenHandlerclase está enhttp://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
Dependiendo de su aplicación, puede configurar el controlador JWT en la canalización WIF exactamente como cualquier otro controlador.
Hay 3 muestras en uso en diferentes tipos de aplicación en
http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure% 20AD% 20Desarrollador% 20Experiencia% 20Team &f% 5B1% 5D.Text = Azure% 20AD% 20Desarrollador% 20Experiencia% 20Team
Probablemente, uno se adaptará a sus necesidades o al menos se adaptará a ellas.
fuente
Me pregunto por qué usar algunas bibliotecas para la decodificación y verificación de tokens JWT.
El token JWT codificado se puede crear usando el siguiente pseudocódigo
Es muy fácil hacerlo sin una biblioteca específica. Usando el siguiente código:
La decodificación del token es la versión inversa del código anterior. Para verificar la firma, necesitará la misma y comparar la parte de la firma con la firma calculada.
ACTUALIZACIÓN: Para aquellos que tienen dificultades para realizar la codificación / decodificación segura de URL en base64, consulte otra pregunta SO , y también wiki y RFC
fuente