Если ключ подписи JWT одинаков для обоих API, и вы отключаете проверку эмитента, токен будет работать для обоих API.
Пример
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false, //this needs to be false
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ClockSkew = TimeSpan.Zero,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("fjboJU3s7rw2Oafzum5fBxZoZ5jihQRbpBZcxZFd/gY="))
};
});
Создание некоторых утверждений (роли - это просто список строк)
public List<Claim> CreateJwtClaims( String UserId, List<String> Roles)
{
// create a list of claims and add userId
var Claims = new List<Claim>
{
new Claim(ClaimTypes.Name, UserId)
};
// add roles to the claims list
// for every role add a new claim type role
foreach (var role in Roles)
{
Claims.Add(new Claim(ClaimTypes.Role, role));
}
return Claims;
}
создать токен прохождения претензий
public string CreateToken(List<Claim> Claims)
{
// JWT Key must be the same as in startup
string JwtSigningKey = "fjboJU3s7rw2Oafzum5fBxZoZ5jihQRbpBZcxZFd/gY=";
// create a security key
var Key = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes(JwtSigningKey));
// sign the key using specified algorithm
var Creds = new SigningCredentials(Key, SecurityAlgorithms.HmacSha256);
// create the token from the signed credentials
var Token = new JwtSecurityToken(
issuer: "localhost", // or try setting issues the the same from both
audience: "localhost",
claims:Claims // passed claims
expires: DateTime.Now.AddMinutes(10), //expires in 10 mins
signingCredentials: Creds);
return new JwtSecurityTokenHandler().WriteToken(Token);
}
в вашем контроллере добавить авторизацию
[Authorize] // this says you must have a valid token
// [Authorize(Roles = "admin")] and must be in role admin created in claims
[Route("api/[controller]")]
public class ValuesController : Controller