por online example ejemplo create autenticacion c# token jwt

c# - online - web api ejemplo



Conflicto entre System.IdentityModel.Tokens y Microsoft.IdentityModel.Tokens (2)

Puede que estés usando la versión 5.0.0.0 de Jwt o superior. He enfrentado el mismo problema antes.

La nueva versión del controlador JWT acepta el espacio de nombres Microsoft.IdentityModel.Tokens.

var tokenDescriptor = new Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor { Subject = claimsIdentity, Audience = allowedAudience, Issuer = issuerName, Expires = DateTime.MaxValue, SigningCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials( new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(symmetricKey), //symmetric key System.IdentityModel.Tokens.SecurityAlgorithms.HmacSha256Signature, System.IdentityModel.Tokens.SecurityAlgorithms.Sha256Digest) }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor);

Tengo un conflicto al usar System.IdentityModel.Tokens:

using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Text; public voidGenereToken() { const string sec = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1"; var now = DateTime.UtcNow; var securityKey = new InMemorySymmetricSecurityKey(Encoding.Default.GetBytes(sec)); var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest); var header = new JwtHeader(signingCredentials); var payload = new JwtPayload { {"iss", "a5fgde64-e84d-485a-be51-56e293d09a69"}, {"scope", "https://example.com/ws"}, {"aud", "https://example.com/oauth2/v1"}, {"iat", now}, }; var secToken = new JwtSecurityToken(header, payload); var handler = new JwtSecurityTokenHandler(); var tokenString = handler.WriteToken(secToken); Console.writeLine(tokenString) }

Recibo el siguiente error cuando creo el encabezado ( var header = new JwtHeader (signatureCredentials); ):

El tipo de argumento ''System.IdentityModel.Tokens.SigningCredentials'' no se puede asignar al tipo de parámetro ''Microsoft.IdentityModel.Tokens.SigningCredentials''

No entiendo porque todo mi tipo se refiere a System.IdentityModel.Tokens . y en la documentación, JwtHeader Constructor necesita System.IdentityModel.Tokens.SigningCredentials

No se lo que está mal ...


System.IdentityModel.Tokens.Jwt versión 5.0.0.0 depende de Microsoft.IdentityModel.Tokens.

Debe usar SigningCredentials en el espacio de nombres Microsoft.IdentityModel.Tokens.

Ejemplo:

using System; using System.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Text; public void voidGenereToken() { const string sec = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1"; var now = DateTime.UtcNow; var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.Default.GetBytes(sec)); var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials( securityKey, SecurityAlgorithms.HmacSha256Signature); var header = new JwtHeader(signingCredentials); var payload = new JwtPayload { {"iss", "a5fgde64-e84d-485a-be51-56e293d09a69"}, {"scope", "https://example.com/ws"}, {"aud", "https://example.com/oauth2/v1"}, {"iat", now}, }; var secToken = new JwtSecurityToken(header, payload); var handler = new JwtSecurityTokenHandler(); var tokenString = handler.WriteToken(secToken); Console.WriteLine(tokenString); }