Поделиться через


Перенос веб-API на основе OWIN в b2clogin.com или пользовательский домен

Здесь описывается метод обеспечения поддержки нескольких поставщиков маркеров в веб-API, реализующих открытый веб-интерфейс для .NET (OWIN). Поддержка нескольких конечных точек маркеров полезна при переносе API Azure Active Directory B2C (Azure AD B2C) и их приложений из одного домена в другой. Например, из login.microsoftonline.com в b2clogin.com или в пользовательский домен.

Добавив в API поддержку приема маркеров, выпущенных b2clogin.com, login.microsoftonline.com или пользовательским доменом, можно выполнить поэтапную миграцию веб-приложений, прежде чем удалять поддержку маркеров, выпущенных login.microsoftonline.com, из API.

В следующих разделах представлен пример включения нескольких издателей в веб-API, который использует компоненты ПО промежуточного слоя Microsoft OWIN (Katana). Хотя примеры кода специфичны для ПО промежуточного слоя Microsoft OWIN, метод в целом должен быть применим и к другим библиотекам OWIN.

Предварительные требования

Для продолжения выполнения действий, описанных в этой статье, необходимы следующие ресурсы Azure AD B2C:

Получение конечных точек издателя маркера

Сначала необходимо получить URI конечной точки издателя маркера для каждого издателя, которого требуется поддерживать в API. Чтобы получить конечные точки b2clogin.com и login.microsoftonline.com, поддерживаемые клиентом Azure AD B2C, выполните следующую процедуру на портале Azure.

Для начала выберите один из имеющихся потоков пользователя:

  1. Перейдите к клиенту Azure AD B2C на портале Azure.

  2. В разделе Политики выберите Пользовательские потоки (политики) .

  3. Выберите имеющуюся политику, например B2C_1_signupsignin1, а затем нажмите Запустить пользовательский поток.

  4. Под заголовком Запуск потока пользователя в верхней части страницы выберите гиперссылку, чтобы открыть конечную точку обнаружения OpenID Connect для этого потока пользователя.

    Ссылка на известный URI на странице

  5. На странице, которая открывается в браузере, запишите значение issuer, например:

    https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

  6. Используйте раскрывающийся список Выбор домена, чтобы выбрать другой домен, а затем снова выполните предыдущие два шага и запишите его значение issuer.

Теперь у вас должны быть записаны два URI такого вида:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

Пользовательские политики

При наличии пользовательских политик вместо потоков пользователей можно использовать аналогичную процедуру для получения URI издателя.

  1. Перейдите к клиенту Azure AD B2C.
  2. Выберите Инфраструктура процедур идентификации.
  3. Выберите одну из политик проверяющей стороны, например B2C_1A_signup_signin.
  4. Используйте раскрывающийся список Выбор домена, чтобы выбрать домен, например yourtenant.b2clogin.com.
  5. Выберите гиперссылку, отображаемую в разделе Конечная точка обнаружения OpenID Connect.
  6. Запишите значение issuer.
  7. Выполните шаги 4–6 для другого домена, например login.microsoftonline.com.

Получение примера кода

Теперь, когда у вас есть оба URI конечной точки маркера, необходимо обновить код, чтобы указать, что обе конечные точки являются действительными поставщиками. Чтобы проанализировать пример, скачайте или клонируйте пример приложения, а затем обновите пример для поддержки обеих конечных точек в качестве действительных поставщиков.

Скачайте архив: active-directory-b2c-dotnet-webapp-and-webapi-master.zip.

git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.git

Включение нескольких издателей в веб-API

В этом разделе вы обновите код, чтобы указать, что обе конечные точки поставщика маркеров являются допустимыми.

  1. Откройте решение B2C-WebAPI-DotNet.sln в Visual Studio.

  2. В проекте TaskService откройте файл TaskService\App_Start\Startup.Auth.cs в своем редакторе.

  3. Добавьте следующую директиву using в начало файла.

    using System.Collections.Generic;

  4. Добавьте свойство ValidIssuers в определение TokenValidationParameters и укажите оба URI, записанные в предыдущем разделе:

    TokenValidationParameters tvps = new TokenValidationParameters
    {
        // Accept only those tokens where the audience of the token is equal to the client ID of this app
        ValidAudience = ClientId,
        AuthenticationType = Startup.DefaultPolicy,
        ValidIssuers = new List<string> {
            "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/",
            "https://{your-b2c-tenant}.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"//,
            //"https://your-custom-domain/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"
        }
    };
    

TokenValidationParameters предоставляется MSAL.NET и используется ПО промежуточного слоя OWIN в следующем разделе кода в Startup.Auth.cs. Если указано несколько допустимых издателей, конвейер приложения OWIN учитывает, что обе конечные точки маркеров являются действительными поставщиками.

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    // This SecurityTokenProvider fetches the Azure AD B2C metadata &  from the OpenID Connect metadata endpoint
    AccessTokenFormat = new JwtFormat(tvps, new tCachingSecurityTokenProvider(String.Format(AadInstance, ultPolicy)))
});

Как упоминалось ранее, другие библиотеки OWIN обычно предоставляют аналогичные средства для поддержки нескольких издателей. Хотя демонстрация примеров для каждой библиотеки выходит за рамки этой статьи, для большинства библиотек можно использовать аналогичную методику.

Переключение конечных точек в веб-приложении

Теперь, когда оба URI поддерживаются веб-API, вам потребуется обновить веб-приложение, чтобы оно получало маркеры от конечной точки b2clogin.com.

Например, можно настроить пример веб-приложения для использования новой конечной точки, изменив значение ida:AadInstance в файле TaskWebApp\Web.config проекта TaskWebApp.

Измените значение ida:AadInstance в файле Web.config в TaskWebApp, чтобы оно ссылалось на {your-b2c-tenant-name}.b2clogin.com вместо login.microsoftonline.com.

Перед следующей операцией.

<!-- Old value -->
<add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}" />

Затем замените {your-b2c-tenant} именем клиента B2C.

<!-- New value -->
<add key="ida:AadInstance" value="https://{your-b2c-tenant}.b2clogin.com/tfp/{0}/{1}" />

Когда строки конечной точки создаются во время выполнения веб-приложения, конечные точки на основе b2clogin.com используются при запросе токенов.

При использовании пользовательского домена:

<!-- Custom domain -->
<add key="ida:AadInstance" value="https://custom-domain/{0}/{1}" />

Следующие шаги

В этой статье показан метод настройки веб-API, реализующий ПО промежуточного слоя Microsoft OWIN (Katana), для приема маркеров из нескольких конечных точек поставщика. Как вы могли заметить, в файлах Web.Config и в проектах TaskService и TaskWebApp есть несколько других строк, которые необходимо изменить, если требуется собрать и запустить эти проекты для собственного клиента. Вы можете соответствующим образом изменить проекты, если вы хотите посмотреть на них в действии, но описание полного пошагового руководства выходит за рамки этой статьи.

Дополнительные сведения о различных типах маркеров безопасности, выпущенных Azure AD B2C, см. в разделе Обзор маркеров в Azure Active Directory B2C.