Слушай, у меня есть угловой проект с 7 фронтами и основной веб-API asp.net.после того, как я создаю веб-токен JWT из веб-API, я возвращаюсь к фронтэнду, и он сохраняется в локальном хранилище.после того как я хочу отправить запрос в веб-API, я добавлю веб-токен JWT в часть заголовка запроса.это будет работать нормально.поэтому я хочу аутентифицировать запрос, используя данные полезной нагрузки JWT.Мои данные полезной нагрузки JWT содержат имя пользователя для регистрации, некоторую информацию о роли пользователя.Я хочу проверить, что это действительный токен, когда получить информацию о продукте по http получить запрос.Можете ли вы помочь мне для аутентификации в основной веб-API asp.net.
основной веб-API Asp.net, Angular 7 cli
Startup.cs - WEB API
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddMvc();
Создание веб-токена - WEB API
private string BuildToken(MYWebApi.Models.CustomerModel user)
{
var claims = new[] {
new Claim(JwtRegisteredClaimNames.NameId,user.CusId.ToString()),
new Claim(JwtRegisteredClaimNames.Sub,user.CusName),
new Claim(JwtRegisteredClaimNames.Email,user.CusEmail),
new Claim("role","user"),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
Помещение токена в заголовок - FRONT END
@Injectable( )
export class TokenInterceptorService implements HttpInterceptor{
constructor(private injector:Injector) { }
intercept(req, next){
let serverService = this.injector.get(ServerService)
let tokenizedReq = req.clone({
setHeaders:{
Autherization:`Bearer ${serverService.getToken()}`
}
})
return next.handle(tokenizedReq)
}
}
Контроллер - WEB API
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
var repo = new MEData.Repository.ProductRepo();
var productData = repo.GetProduct(productId);
return productData;
}