Пустой профиль пользователя в HttpContext в веб-приложении Azure

#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, и он упоминался при ответе на ответ, что очень недружелюбно.