Автоматическое прикрепление токена доступа к клиенту HTTP в Blazor Wasm ⇐ C#

Место общения программистов C#
Anonymous
Автоматическое прикрепление токена доступа к клиенту HTTP в Blazor Wasm

Сообщение Anonymous »

Я использую поставщика идентификатора ID Connect для моего приложения Blazor WASM и хотел бы, чтобы токен доступа был прикреплен к клиенту HTTP, как описано в этой статье. /> в программе.

Код: Выделить всё

// Add service for CustomAuthorizationMessageHandler
builder.Services.AddScoped();

// Http client for requests to API
builder.Services.AddHttpClient("API", client =>
{
// Set base address to API url
client.BaseAddress = new Uri("https://localhost:44370");

// Set request headers to application/json
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
}).AddHttpMessageHandler();

// Auth0 authentication setup
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Auth0", options.ProviderOptions);
options.ProviderOptions.ResponseType = "code";
});
< /code>
Custom AuthorizationHandler.csp>
public class CustomAuthorizationMessageHandler : AuthorizationMessageHandler
{
public CustomAuthorizationMessageHandler(IAccessTokenProvider provider,
NavigationManager navigationManager)
: base(provider, navigationManager)
{
ConfigureHandler(
authorizedUrls: new[] { "https://localhost:44370" },
scopes: new[] { "admin" });
}
}
< /code>
При попытке получить доступ к API < /p>
try
{
var client = ClientFactory.CreateClient("API");
message = await client.GetStringAsync("api/message");
}
catch (AccessTokenNotAvailableException e)
{
message = "You CANNOT access the api. Please log in";
}
< /code>
В настоящее время приведенный ниже код работает, чтобы получить сообщение из API при удалении вызова AddhttpmessageHandler в программе. TokenProvider имеет тип iAccessTokenProvider и вводится в.var client = ClientFactory.CreateClient("API");
using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, "api/message"))
{
var tokenResult = await TokenProvider.RequestAccessToken();

if (tokenResult.TryGetToken(out var token))
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
var response = await client.SendAsync(requestMessage);
if(response.IsSuccessStatusCode)
{
message = await response.Content.ReadFromJsonAsync();
}
else
{
message = await response.Content.ReadAsStringAsync();
}
}
else
{
message = "You CANNOT access the api. Please log in";
}
}
Как я могу это исправить, чтобы я не получал AccessTokenNotaVailableException каждый раз?


Подробнее здесь: https://stackoverflow.com/questions/630 ... lazor-wasm

Вернуться в «C#»