Reputation: 9
I have two APIs, MainApi
and IoApi
.
I try to set JWT token for authentication, when I try to get data from IoApi
, first of all get Token and then get authorize data.
But in my case, I set the audience and I try to get data from another API, so there are also get the authorize data.
I try to set the MainApi
url set in my IoApi
audience, but there are not get MainApi
url on it...
This my API code :
[HttpGet]
[Route("GetInputByID1")]
public async Task<IActionResult> GetInputByID1()
{
try
{
var tokenResponse = await client.GetAsync("http://localhost:5173/api/Auth/GenerateToken");
if (!tokenResponse.IsSuccessStatusCode)
{
return StatusCode((int)tokenResponse.StatusCode, "Failed to get JWT token from DBAPI.");
}
var tokenResult = await tokenResponse.Content.ReadAsStringAsync();
var tokenObj = JsonConvert.DeserializeObject<dynamic>(tokenResult);
string jwtToken = tokenObj?.token;
return Ok(jwtToken);
}
catch (Exception ex)
{
_logger.LogError($"Error: {ex.Message}");
return StatusCode(500, $"An error occurred: {ex.Message}");
}
}
IoApi
:
[HttpGet("GenerateToken")]
public IActionResult GenerateToken()
{
var request = HttpContext.Request;
string callerUrl =$"{ request.Scheme }://{ request.Host }{ request.Path }{ request.QueryString }";
_logger.LogInformation($"base ....... {callerUrl}");
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("sJw1Pq5/D2S98XTX7h0IrsnZ5/Eih8XocFq58a0vIVY="));
var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Iss, "http://localhost:5173"),
new Claim(JwtRegisteredClaimNames.Aud, callerUrl)
};
var tokenOptions = new JwtSecurityToken(
issuer: "http://localhost:5173",
audience: callerUrl,
claims: claims,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: signinCredentials
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(tokenOptions);
return Ok(new { Token = tokenString });
}
[Authorize]
[HttpGet]
public IActionResult GetData()
{
return Ok(new { message = "Protected data retrieved successfully!" });
}
When I call fromMainApi
to IoApi
, there are not set the MainApi
url in my IoApi
.
How to do MainApi
request url set in my audience?
I want to set my MainApi
request url in my IoApi
audience.
Upvotes: 0
Views: 30