#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