#c# #azure #authentication #azure-web-app-service #auth0
#c# #azure #аутентификация #azure-web-app-service #auth0
Вопрос:
Я использую службу веб-приложений Azure с моим поставщиком удостоверений Auth0. Я получил эту работу, но всякий раз, когда я захожу на свой веб-сайт, размещенный в azure, профиль пользователя не загружается в HttpContext. Это работает локально в IIS Express. Есть идеи, чего мне может не хватать?
Это мой код для получения профиля пользователя, вошедшего в систему:
[Inject]
private IHttpContextAccessor HttpContextAccessor { get; set; }
private string loginId;
/// <summary>
/// On initialized
/// </summary>
/// <returns></returns>
protected override async Task OnInitializedAsync()
{
await LoadInvoiceTypes();
this.loginId = HttpContextAccessor.HttpContext.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
}
Я немного зарегистрировался на веб-сайте, и кажется, что HttpContext имеет значение null.
Заранее спасибо!
Ответ №1:
Пожалуйста, сначала посмотрите результаты моего теста.
Ниже приведен мой тестовый код.
public string test()
{
var obj = _httpContextAccessor.HttpContext;
this.loginId = _httpContextAccessor.HttpContext.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
return loginId;
}
Вы можете увидеть результат моего теста в формате gif.
То, что я пытаюсь просто добавить services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Startup.cs
.
Для получения более подробной информации вы можете обратиться к блогам, это работает для меня.
Доступ к HttpContext в ASP.NET Ядро
И вы также можете загрузить мой пример кода, чтобы протестировать его, надеюсь, мой ответ поможет вам.
Комментарии:
1. Привет, Джейсон, спасибо за информацию, но локально все работает. Когда я публикую в Azure, HttpContext пуст.
Ответ №2:
По-видимому, в blazor рекомендуется использовать AuthenticationStateProvider . Это дает мне зарегистрированного пользователя в Azure, как я и ожидал.
protected string loginId;
[Inject]
private AuthenticationStateProvider AuthProvider { get; set; }
protected override async Task OnInitializedAsync()
{
var authState = await AuthProvider.GetAuthenticationStateAsync();
this.loginId = authState.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
await base.OnInitializedAsync();
}
Спасибо за ваш вклад.
Комментарии:
1. Я полагаю, что когда вы будете задавать вопрос в следующий раз, вопрос должен быть четко сформулирован, blazor не упоминался с начала и до конца вопроса post, и он упоминался при ответе на ответ, что очень недружелюбно.