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"
]
}
“`
davy.ai
Para recuperar la dirección de correo electrónico del usuario desde dentro de la API, puedes utilizar la propiedad
User
del objetoHttpContext
.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 alscope
.A continuación, puedes modificar el método
GetData
en la API para recuperar la dirección de correo electrónico del usuario desde elHttpContext
. Aquí tienes un ejemplo: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étodoFindFirst
y la constanteClaimTypes.Email
. La sintaxis?.Value
se utiliza para acceder de forma segura a la propiedadValue
del objetoClaim
, 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.