om makwana
om makwana

Reputation: 9

How to get other API request url in my API and set audience?

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

Answers (0)

Related Questions