Как использовать OAuth 2.0 от имени in .netframework API

#c# #asp.net-web-api #oauth-2.0 #owin #azure-ad-b2c

#c# #asp.net-web-api #oauth-2.0 #owin #azure-ad-b2c

Вопрос:

У меня есть 2 API, и я хотел использовать OAuth 2.0 от имени потока для генерации токена в API1 и авторизации в API2 с помощью сгенерированного токена.

Я последовал https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request и я смог сгенерировать токен. Я использую следующие параметры:

 grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer
client_id:xxxxx
client_secret:xxxxxx
requested_token_use:on_behalf_of
scope:https://graph.microsoft.com/user.read
 

Но я не знаю, как пройти аутентификацию в моем API2 с помощью этого токена и получить пользователя и каковы следующие шаги. Мой API для приложения .netframework использует .

Я создал OwinStartup и добавил UseWindowsAzureActiveDirectoryBearerAuthentication

  app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions()
            {
                Tenant = "xxxxxxxxxx",// Azure tenant Id
                TokenValidationParameters = new TokenValidationParameters()
                {
                    SaveSigninToken = true,
                    ValidAudience = "https://graph.microsoft.com"
                }
            });
 

и добавил атрибут авторизации в мой контроллер. но когда я вызвал конечную точку get для этого контроллера, он выдал мне сообщение об ошибке:
Для этого запроса было отказано в авторизации.

Ответ №1:

Вам нужно запросить два токена, один из которых является токеном доступа API A, а другой — токеном доступа API B, полученным с использованием токена доступа API A в качестве параметра.

Документ, на который вы ссылаетесь, основан на полученном вами токене доступа api A, и в документе есть инструкции.

Во-первых, вам необходимо использовать поток кода аутентификации или другой поток входа в систему для получения токена доступа api A:

введите описание изображения здесь

Затем используйте токен доступа API A в качестве параметра, чтобы получить токен доступа API B.

введите описание изображения здесь

Комментарии:

1. Я уже выполнил эту часть в API A, и у меня есть токен. но я, когда я передал токен доступа в качестве заголовка авторизации (на предъявителя) в API B, я получаю сообщение об ошибке. Для этого запроса было отказано в авторизации. Я добавил app.UseWindowsAzureActiveDirectoryBearerAuthentication в класс API B statup.cs. но не помогло

Ответ №2:

В API A я использовал неправильную область для генерации токена. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request