Получение сообщения об ошибке при попытке защиты основного веб-API Aspnet с помощью аутентификации B2C: невозможно получить конфигурацию openid - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь защитить свой основной веб-API-сервер aspnet, заставляя его проходить аутентификацию в Azure B2C с использованием предоставленных пользователем токенов однонаправленного канала JWT.Я следовал некоторому примеру кода, найденному на официальных страницах Microsoft GitHub, но не могу заставить его работать.

В моей политике B2C он настроен на использование формата URL-адреса издателя по умолчанию: https: ////v2.0/

В моем веб-приложении этот URL-адрес указан в качестве параметра Authority в параметрах JWT.

Когда я отправляю HTTP-запрос на мойсервер, код сервера идентификации не удается, поскольку он пытается связаться с B2C для получения конфигурации openid.Он завершается ошибкой со следующей ошибкой ...

HttpRequestException: Response status code does not indicate success: 404 (Not Found).
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()

IOException: IDX20804: Unable to retrieve document from: 'https://innovativelitfoundry.b2clogin.com/0f55bfb6-6af5-4293-8963-29ae099183cc/v2.0/.well-known/openid-configuration'.
Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(string address, CancellationToken cancel)

InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://innovativelitfoundry.b2clogin.com/0f55bfb6-6af5-4293-8963-29ae099183cc/v2.0/.well-known/openid-configuration'.
Microsoft.IdentityModel.Protocols.ConfigurationManager<T>.GetConfigurationAsync(CancellationToken cancel)

Действительно, этот URL-адрес не будет работать, поскольку, по-видимому, он не включает имя политики из используемого маркера в строку запроса.Таким образом, этот URL действительно не работает.

Я не уверен, как заставить код предоставлять это имя политики в строке запроса?Или он должен делать это автоматически?

Вот код в моем приложении ASPI Core Web API, где я настраиваю параметры аутентификации ...

    public void ConfigureServices(IServiceCollection services)
    {
        IdentityModelEventSource.ShowPII = true;

        services
            .AddAuthentication(ConfigureAuthentication)
            .AddJwtBearer(ConfigureJwt);

        services
            .AddCors();

        services
            .AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services
            .AddSingleton(Configuration);
    }

    private void ConfigureAuthentication(AuthenticationOptions options)
    {
        options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    }

    private void ConfigureJwt(JwtBearerOptions options)
    {
        var tenant = Configuration["AzureAd:TenantId"];

        options.Audience = Configuration["AzureAd:ApplicationId"];
        options.Authority = $"https://innovativelitfoundry.b2clogin.com/{tenant}/v2.0/";
    }

Кто-нибудь, возможно, знает, чтоЯ могу делать неправильно здесь?Как я могу заставить мое приложение aspnet core web api корректно развернуть этот документ конфигурации openid?

1 Ответ

0 голосов
/ 29 ноября 2018

Необходимо установить options.Authority для URL-адреса полномочий, который включает идентификатор политики:

options.Authority = $"https://innovativelitfoundry.b2clogin.com/{tenant}/{policy}/v2.0/";

Пока вы установили претензия эмитента для всех политик наURL-адрес эмитента, который не содержит идентификатор политики , затем приложение API может загрузить документ конфигурации для любой политики и затем проверить токены, выпущенные для всех политик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...