В чем разница между UseWindowsAzureActiveDirectoryBearerAuthentication и UseOpenIdConnectAuthentication? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть webapi, который зарегистрирован в Azure AD.который имеет код ниже в Startup.Auth.cs

   public void ConfigureAuth(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                ClientId = ClientId,
                Authority = Authority,
                PostLogoutRedirectUri = PostLogoutRedirectUri
            });

Когда я запускаю этот webapi в браузере, он запрашивает логин и после успешного входа в систему может видеть URL всех API.

I 'Я пытаюсь получить доступ к этому защищенному API из веб-приложения, которое зарегистрировано в том же Azure AD.

Когда я использую AcquireTokenAsync в Webapp для генерации токена доступа для этого webapi, он работает, но в качестве ответа дает html-страницу входа в систему.

Чтобы избежать этого, я попытался сгенерировать токен без вывода сообщений, используя AcquireTokenSilentAsyncно возникает исключение unable to generate token cache not found, но ключ кеша все еще обнаруживает исключение.

После того, как в каком-то посте git google предложили использовать UseWindowsAzureActiveDirectoryBearerAuthentication этот код в WebApi, и они сказали, что он вернет вывод api при вызове из webapp вместо входа в системувывод страницы, но она не работает.

 app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                {
                    Audience = ConfigurationManager.AppSettings["ida:Audience"],
                    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                    TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
                    {
                        ValidateIssuer = false
                    }
                });

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Компоненты ASP.NET OWIN включают в себя промежуточное программное обеспечение, специально разработанное для защиты веб-API через Azure AD и доступ по токену-носителю OAuth2.Промежуточное программное обеспечение OpenID Connect (UseOpenIdConnectAuthentication) срабатывает, когда запросы поступают на контроллеры UX, которые подают UX в браузер, а промежуточное ПО токена канала-носителя Azure AD OAuth2 (UseWindowsAzureActiveDirectoryBearerAuthentication) срабатывает только тогда, когда запрос направлен на веб-API.

0 голосов
/ 14 октября 2018

API не должен требовать от пользователя входа в систему.Второй вариант с аутентификацией токена Bearer является правильным.Это означает, что вашему клиентскому приложению необходимо получить токен доступа и передать его с HTTP-запросами.

AcquireTokenAsync и AcquireTokenSilentAsync работают немного иначе, чем вы думаете.Первый принимает несколько аргументов, а затем вызывает / oauth2 / token конечную точку полномочий AAD для получения токена доступа , если у него уже нет токена доступа в кеше .Автоматическая версия проверяет только кэш и выдает исключение, если не может его найти.

Таким образом, ваше клиентское приложение обычно использует один из вариантов AcquireTokenAsync для получения токена доступа и токена обновления.Когда вы сделаете это, ADAL сохранит токены в предоставленном вами кэше токенов (или в кэше в памяти по умолчанию).Затем в вашем коде вы можете использовать беззвучную версию для получения токенов, поскольку вы можете ожидать, что они будут в кеше.

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