es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Información de identidad de Blazor WebApi

Estoy teniendo problemas para obtener la información de identidad de los usuarios desde la API. Mi proyecto consiste en una aplicación WASM independiente, un proveedor de identidad (IDP) y una WebApi.

Tengo todo configurado y funciona, pero lo que busco es hacer una llamada desde el cliente Blazor para obtener algunos datos de la API. La API luego utiliza la dirección de correo electrónico del usuario para identificarlo y obtener los datos solo para él.

He revisado preguntas similares y las soluciones no funcionan en mi proyecto.

[HttpGet("GetData")]
public async Task<iactionresult> GetData()
{
    string test = User.Identity.Name; // devuelve null

    string username = "myuser@users.com";

    List<string> data = new List<string>();
    data = (await _dataRepository.GetData(username)).ToList();

    if (data.Count > 0)
    {
        return Ok(data);
    }
    else
    {
        return NoContent();
    }
}

Entonces, ¿hay alguna forma de obtener el correo electrónico del usuario que hizo la solicitud en el lugar donde estoy configurando el nombre de usuario?

Editado
Token de acceso:

“`
{
"alg": "RS256",
"kid": "2D49329C75FC43C78590AF6F6A0EFDB2",
"typ": "at+jwt"
}

{
"nbf": 1639243158,
"exp": 1639246758,
"iss": "https://localhost:5000",
"aud": "https://localhost:5000/resources",
"client_id": "ATS",
"sub": "4892725f-f6da-4a28-827a-ce666bb6f098",
"auth_time": 1638729064,
"idp": "local",
"jti": "53CB2F8FCB2EB34E3501E2C210B59B5D",
"sid": "8463E4AA74D7369C1176249ED8FA46B1",
"iat": 1639243158,
"scope": [
"openid",
"profile",
"MY_API",
"email"
],
"amr": [
"pwd"
]
}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para recuperar la dirección de correo electrónico del usuario desde dentro de la API, puedes utilizar la propiedad User del objeto HttpContext.

    Primero, asegúrate de que la dirección de correo electrónico del usuario se agregue al scope del token de acceso para que se incluya en las reclamaciones. Según el token de acceso editado en la pregunta, parece que la dirección de correo electrónico ya se ha agregado al scope.

    A continuación, puedes modificar el método GetData en la API para recuperar la dirección de correo electrónico del usuario desde el HttpContext. Aquí tienes un ejemplo:

    [HttpGet("GetData")]
    public async Task<iactionresult> GetData()
    {
        string email = HttpContext.User.FindFirst(ClaimTypes.Email)?.Value;
    
        if (string.IsNullOrEmpty(email))
        {
            // Dirección de correo electrónico del usuario no encontrada en las reclamaciones
            return BadRequest();
        }
    
        List<string> data = await _dataRepository.GetData(email);
    
        if (data.Count > 0)
        {
            return Ok(data);
        }
        else
        {
            return NoContent();
        }
    }
    

    En este ejemplo, se utiliza HttpContext.User para recuperar las reclamaciones del usuario actual. La reclamación de correo electrónico se recupera utilizando el método FindFirst y la constante ClaimTypes.Email. La sintaxis ?.Value se utiliza para acceder de forma segura a la propiedad Value del objeto Claim, sin causar una excepción de referencia nula si no se encuentra la reclamación.

    Una vez que se recupera la dirección de correo electrónico, se puede utilizar para recuperar los datos para ese usuario.

Comments are closed.