Blazor obtenir le jeton jwt lors de l’identification

blazor

Question

Je dois obtenir la réponse d'un jeton venant d'un aspap webapi qui ressemble à ceci

return new JwtSecurityTokenHandler().WriteToken(token);

et de la page de connexion Blazor

    private async Task LoginEmisor()
{
    var response = await http.PostJsonAsync<Emisor>("api/Emisors/Login",emisor);
    Storage["token"] = response.Token;
    Console.WriteLine(response.Token);
}

Et je reçois une erreur de sérialisation car la réponse attend un objet Emisor et non le Token que je souhaite réellement obtenir. En guise de solution de contournement, j'ai ajouté une propriété de chaîne Token à la classe Emisor.

            emisor.Token = token.ToString();
            return emisor;

et retourner tout l'émisor avec le jeton en tant que propriété, et ainsi j'ai pu l'obtenir et le stocker dans un stockage local. Mais je pense que ce n'est pas la bonne façon de le faire, je pense que je dois pouvoir obtenir le jeton sans faire partie d'Emiror.

Réponse acceptée

J'ai créé une méthode d'extension à cet effet:

    public static async Task<string> SendJsonAsyncRawResult(this HttpClient httpClient, HttpMethod httpMethod, string requestUri, object content)
    {
        var requestJson = JsonUtil.Serialize(content);
        var response = await httpClient.SendAsync(new HttpRequestMessage(httpMethod, requestUri)
        {
            Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
        });

        return await response.Content.ReadAsStringAsync();

    }

et ensuite l'utiliser comme ceci:

        var obj = new { username, password };
        var token = await _http.SendJsonAsyncRawResult(HttpMethod.Post, "api/token", obj);

Aussi disponible sur nuget



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow