با سلام خدمت دوستان محترم برنامه نویس
من دارم یه پروژه میکرو سرویس مینویسم فعلا توی لوکال هست اما هرکار میکنم خطای 404 میده
کدهای مربوط به ساخت توکن JWT درست کار میکنه و توکن جدید رو با پستمن توی آدرس زیر میتونم دریافت کنم
Localhost:9000/connect/token
اما موقع login و Register خطا 404 میده
مسیر : Localhost:9000/api/auth/login
مسیر : Localhost:9000/api/auth/register
میشه لطف کنین بگین خطای کارم کجاها میتونه باشه
این کدهای LoginContoller
using IdentityService.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using static OpenIddict.Abstractions.OpenIddictConstants;
namespace IdentityService.Controllers
{
[Route("api/auth")]
[ApiController]
public class LoginController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
public LoginController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginModel model)
{
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null || !await _userManager.CheckPasswordAsync(user, model.Password))
{
return Unauthorized("Invalid email or password");
}
var claims = new List<Claim>
{
new Claim(Claims.Subject, user.Id),
new Claim(Claims.Email, user.Email),
new Claim(Claims.Name, user.FullName ?? user.UserName),
new Claim(Claims.Role, "User")
};
var identity = new ClaimsIdentity(claims, TokenValidationParameters.DefaultAuthenticationTyp e);
var principal = new ClaimsPrincipal(identity);
var signingCredentials = new SigningCredentials(
new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Super StrongJwtEncryptionKey123!@")),
SecurityAlgorithms.HmacSha256);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = principal.Identity as ClaimsIdentity,
Expires = DateTime.UtcNow.AddHours(1),
SigningCredentials = signingCredentials
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
var jwtToken = tokenHandler.WriteToken(token);
return Ok(new { Token = jwtToken });
}
}
}
این کدهای RegisterController
using IdentityService.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace IdentityService.Controllers
{
[Route("api/auth")]
[ApiController]
public class RegisterController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
public RegisterController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterModel model)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, FullName = model.FullName };
var result = await _userManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
return BadRequest(result.Errors);
return Ok("User registered successfully");
}
}
}
اینم کدهای Ocelot
{
"Routes": [
{
"DownstreamPathTemplate": "/connect/token",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/auth/token",
"UpstreamHttpMethod": [ "POST" ]
},
{
"DownstreamPathTemplate": "/api/auth/register",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/auth/register",
"UpstreamHttpMethod": [ "POST" ]
},
{
"DownstreamPathTemplate": "/api/auth/login",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/auth/login",
"UpstreamHttpMethod": [ "POST" ]
},
{
"DownstreamPathTemplate": "/api/protected",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/protected",
"UpstreamHttpMethod": [ "POST" ],
"AuthenticationOptions": {
"AuthenticationProviderKey": "Bearer",
"AllowedScopes": []
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:9000"
}
}