Secure. Net Core 3 Web API с токеном AAD - PullRequest
1 голос
/ 08 марта 2020

Из-за некоторых технических ограничений мы выполняем аутентификацию по имени пользователя / паролю AAD при входе пользователя в систему.

Пользователи будут вводить свои имя пользователя и пароль на нашу пользовательскую страницу входа, и наше приложение вызывает IPublicClientApplication.AcquireTokenByUsernamePassword .

Я планирую использовать возвращенный токен для вызова другого приложения Web API (также подключающегося к тому же AAD). В приложении Web API я сделал следующее:

  1. Добавил следующий код при запуске services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

  2. , включив в мои настройки следующие параметры appsettings. json file
    "AzureAd": { "Instance": "https://login.microsoftonline.com/", "ClientId": "<Application ID>", "TenantId": "<Tenant ID>" }

  3. Защитите мой веб-API с помощью [Authorize]

Затем я использую Postman для создания вызова Web API на основе возвращенного токена. Я включил Authorization: Bearer <JWT Token>. Веб-API возвращает

Ошибка носителя = "invalid_token", error_description = "Подпись недействительна"

Мои вопросы

  1. Может Приложение Web API проверяет имя пользователя / пароль, полученный токен?
  2. Если токен можно проверить в приложении Web API, как я могу это сделать, так как я получаю вышеуказанную ошибку?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Я тестирую на своем сайте, и он работает хорошо, вы можете обратиться к следующим шагам:

1. Зарегистрируйте приложение Webapi в azure ad.

2.Щелкните Expose an API и Add a scope например webread.

enter image description here

3. Нажмите Manifest, измените accessTokenAcceptedVersion на 2.0.

enter image description here

4. В visual studio webapi ConfigureServices:

services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, 
options =>
{
    options.Authority += "/v2.0";
    options.TokenValidationParameters.ValidAudiences = new[]
    {
        options.Audience,
        $"api://{options.Audience}"
    };
});

5. Зарегистрируйте клиентское приложение в azure объявление.

6.Щелкните Authentication, установите Default client type как Yes. enter image description here

7.Нажмите Api Permission> Add a permission, выберите My APIs и выберите веб-интерфейс, который вы зарегистрировали ранее.

enter image description here

8. В клиентском приложении Visual Studio установите область с помощью веб-чтения:

string[] scopes = new string[] { "api://1890e822-xxxxxxxxxxxxxxxx/webread" };

Надеюсь, это поможет вам.

0 голосов
/ 09 марта 2020

Из предоставленного вами документа вы используете MSAL для получения токена доступа с помощью Resource Owner Flow в конечной точке Azure AD V2.0.

Из документа , при проверке токена доступа, выданного из Azure AD V2.0, вы должны добавить /v2.0 в Authority:

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    // This is a Microsoft identity platform web API.
    options.Authority += "/v2.0";

    // The web API accepts as audiences both the Client ID (options.Audience) and api://{ClientID}.
    options.TokenValidationParameters.ValidAudiences = new []
    {
    options.Audience,
    $"api://{options.Audience}"
    };

});
...