Что касается настройки интеграции AAD с использованием веб-API ASPNet Core 2.1 - PullRequest
0 голосов
/ 31 октября 2018

У меня уже есть интегрированный AAD WebAPP с использованием ASP.Net Core 2.1, но теперь я хочу разработать API-интерфейс с использованием ASPNet Core 2.1 для аутентификации пользователя AAD в моем API с использованием маркера-носителя JWT. Я не могу выполнить то же самое, потому что в веб-приложении я использую режим Cookie Auth, но здесь мне нужно внедрить JWT Bearer, который у меня не работал. Я перепробовал много кода из разных репо.

Ссылка: https://github.com/juunas11/Joonasw.AzureAdApiSample

https://github.com/Azure-Samples/active-directory-b2c-dotnetcore-webapi

https://azure.microsoft.com/en-in/resources/samples/active-directory-dotnet-native-aspnetcore-v2/

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Audience = "https://localhost:44395/";
options.Authority = "https://localhost:44395/identity/";
})
.AddJwtBearer("AzureAD", options =>
{
options.Audience = "https://localhost:44395/";
options.Authority = "https://login.microsoftonline.com/tenantID/";
});

        services.AddAuthorization(options =>
        {
            var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder(
                JwtBearerDefaults.AuthenticationScheme,
                "AzureAD");
            defaultAuthorizationPolicyBuilder =
                defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
            options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
        });

Когда я меняю режим на Cookie, он работает нормально, но не работает в коде JWTBearer.

Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization failed.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
Microsoft.AspNetCore.Mvc.ChallengeResult:Information: Executing ChallengeResult with authentication schemes (Bearer, AzureAD).
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:Information: AuthenticationScheme: Bearer was challenged.
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:Information: AuthenticationScheme: AzureAD was challenged.

Может ли кто-нибудь помочь мне здесь? Я застрял здесь из-за этой проблемы.

Заранее спасибо

1 Ответ

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

Предположим, что у вас есть ресурсы API REST, написанные в ASP.NET Core Web API, которые защищены Azure AD, и клиент (веб-приложение ASP.NET) может использовать промежуточное ПО OpenID Connect и библиотеку аутентификации Active Directory (ADAL.NET) для получить токен-носитель JWT для вошедшего в систему пользователя с использованием протокола OAuth 2.0.

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

        services
        .AddAuthentication(o =>
        {
            o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(o =>
        {
            o.Authority = Configuration["Authentication:Authority"];
            o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                // Both App ID URI and client id are valid audiences in the access token
                ValidAudiences = new List<string>
                {
                    Configuration["Authentication:AppIdUri"],
                    Configuration["Authentication:ClientId"]
                }
            };
        });

Приведенный выше пример кода использует JwtBearerExtensions для проверки токена доступа. Вы можете нажать здесь для объяснения сценария.

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