System.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens之间的冲突 [英] Conflict between System.IdentityModel.Tokens and Microsoft.IdentityModel.Tokens
问题描述
使用System.IdentityModel.Tokens时发生冲突:
I have a conflict when using 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 JwtHeader(signingCredentials); ):
I get following error when I create header (var header = new JwtHeader(signingCredentials);) :
参数类型'System.IdentityModel.Tokens.SigningCredentials'不是 可分配给参数类型 "Microsoft.IdentityModel.Tokens.SigningCredentials"
Argument type 'System.IdentityModel.Tokens.SigningCredentials' is not assignable to parameter type 'Microsoft.IdentityModel.Tokens.SigningCredentials'
我不明白,因为我所有的类型都引用了 System.IdentityModel.Tokens . 并在文档 JwtHeader构造函数中需要 System.IdentityModel.Tokens.SigningCredentials
I don't understand because all my type refers to System.IdentityModel.Tokens. and in documentation JwtHeader Constructor need System.IdentityModel.Tokens.SigningCredentials
我不知道怎么了...
I don't know what's wrong ...
推荐答案
System.IdentityModel.Tokens.Jwt版本5.0.0.0取决于Microsoft.IdentityModel.Tokens.
System.IdentityModel.Tokens.Jwt version 5.0.0.0 depends on Microsoft.IdentityModel.Tokens.
您需要在Microsoft.IdentityModel.Tokens命名空间中使用SigningCredentials.
You need to use SigningCredentials in the Microsoft.IdentityModel.Tokens namespace.
示例:
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);
}
这篇关于System.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens之间的冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!