在使用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)
}当我创建标题(var header = new (SigningCredentials);)时,我得到以下错误:
参数类型'System.IdentityModel.Tokens.SigningCredentials‘不能分配给参数类型'Microsoft.IdentityModel.Tokens.SigningCredentials’
我不明白,因为我所有的类型都是指System.IdentityModel.Tokens。在文档中,System.IdentityModel.Tokens.SigningCredentials需要JwtHeader构造器
我不知道怎么了..。
发布于 2016-07-13 04:42:22
System.IdentityModel.Tokens.Jwt版本5.0.0.0依赖于Microsoft.IdentityModel.Tokens。
您需要在SigningCredentials命名空间中使用Microsoft.IdentityModel.Tokens。
示例:
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);
}发布于 2017-11-19 07:12:33
可能您正在使用的是Jwt版本5.0.0.0或更高版本。我以前也曾面对过同样的问题。
新版本的JWT处理程序接受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);https://stackoverflow.com/questions/38338580
复制相似问题