Cannot convert from "Microsoft.IdentityModel.Tokens.SymmetricSecurityKey" to "Microsoft.IdentityModel.Tokens.SigningCredentials"

During the training, Create a RESTful authenticated API using the Web API and Jwt . I had a problem compiling the CustomJwtFormat class:

 using System.IdentityModel.Tokens; using Microsoft.Owin.Security; using Microsoft.Owin.Security.DataHandler.Encoder; using Thinktecture.IdentityModel.Tokens; namespace BooksAPI.Identity { public class CustomJwtFormat : ISecureDataFormat<AuthenticationTicket> { private static readonly byte[] _secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["secret"]); private readonly string _issuer; public CustomJwtFormat(string issuer) { _issuer = issuer; } public string Protect(AuthenticationTicket data) { if (data == null) throw new ArgumentNullException(nameof(data)); var signingKey = new HmacSigningCredentials(_secret); var issued = data.Properties.IssuedUtc; var expires = data.Properties.ExpiresUtc; return new JwtSecurityTokenHandler().WriteToken( new JwtSecurityToken( _issuer, null, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey)); } public AuthenticationTicket Unprotect(string protectedText) { throw new NotImplementedException(); } } } 

The build error I get is:

Unable to convert from 'Thinktecture.IdentityModel.Tokens.HmacSigningCredentials' to 'Microsoft.IdentityModel.Tokens.SigningCredentials'

Looking for this, I found this SO post:

ASP.NET v5 Multiple SigningCredentials

I tried the recommendation in the reply mail, but to no avail. I followed the link:

Ambiguous reference problem (Microsoft.AspNet.Identity and Microsoft.AspNet.Identity.Core)

But I still see the conflict. What combination of packages and namespace should I use?

+6
source share
2 answers

I ran into the same problem. You should use an older version of System.IdentityModel.Tokens.Jwt.

open the nuget package manager console and run:

 Install-Package System.IdentityModel.Tokens.Jwt -Version 4.0.2.206221351 
+16
source

original method:

 var signingKey = new HmacSigningCredentials(_secret); 

new method:

 var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(_secret); var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials( securityKey,SecurityAlgorithms.HmacSha256Signature); //--- var issued = data.Properties.IssuedUtc; var expires = data.Properties.ExpiresUtc; var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingCredentials); 
+2
source

Source: https://habr.com/ru/post/1014602/


All Articles