2

У меня есть сайт ASP.NET Web Forms, где пользователи будут входить в систему с помощью Azure Active Directory. В качестве клиента он называет сайт Asp.Net Core Web Api, который будет возвращать некоторую информацию в зависимости от роли клиента. Подход аналогичен образцу https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore.Могут ли клиентские и сервисные веб-приложения использовать одно и то же приложение Azure Active Directory?

Каждое приложение в образце имеет собственное приложение Azure Active Directory. Мое приложение имеет довольно много ролей приложений, и их поддержка в обоих приложениях может быть раздражающей и подверженной ошибкам. Я хочу, чтобы клиент и служба использовали одно приложение AAD, чтобы не поддерживать одни и те же роли в двух приложениях AAD.

Я не видел такую ​​архитектуру в примерах, - любая проблема с таким подходом?

Я попытался реализовать его и получил «многообещающую» ошибку, что «сценарий поддерживается».

AADSTS90009: Приложение запрашивает токен для себя. Этот сценарий поддерживается только в том случае, если ресурс указан с использованием идентификатора приложения GUID .

К сожалению, я не понимаю, как указать ресурс «с использованием идентификатора приложения на основе GUID». В запросе я уже использую GUID ресурс = HTTPS% 3A% 2F% 2FMyDomain.onmicrosoft.com% 2Fe0a25761-XXXX-XXXX-XXXX-2aefc7e3134d

Совет изменить некоторые GUID на MS Форумы нить https://social.msdn.microsoft.com/Forums/azure/en-US/3de0c14d-808f-47c3-bdd6-c29758045de9/azure-ad-authentication-issue-aadsts90009?forum=WindowsAzureAD#cf3986f5-3422-44d1-bcb7-3a4201f68fa2(I попросил уточнений там) также неясно.

Так что мой вопрос: Могу ли я использовать одно и то же приложение AAD между клиентом и Службой, и, если да, как это сделать?

ответ

0

Я попытался добавить новый идентификатор идентификатора приложения для приложения AAD (identifierURIs []), который поддерживается в соответствии с https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-manifest. Manifest разрешено указывать несколько identifierURIs, но порталы (как новые, так и классические) показывают только первый из URI. Новый портал выделяет поле ввода идентификатора URI приложения как измененное и предлагает его сохранить (эффективно удаляя второй URI).

Однако я понял, что мне не нужны оба приложения AAD для ролей. Я могу иметь 2 отдельных приложения AAD и сохранять роли только в одном из них. Клиент веб-сайта будет аутентифицировать пользователя, но не проверяет сами роли. Вместо этого он будет вызывать веб-сайт API, в котором должно быть приложение AAD со всеми объявленными и назначенными пользователями ролями пользователей/групп пользователей. Веб-API может предоставлять роли/разрешения клиенту в соответствии с запросами клиента.

2

Основываясь на моем тесте, обычный арендатор Azure AD не поддерживает смешение клиентских и серверных приложений.

Вот мой пытается для справки:

1 .Grant разрешение на само приложение, изменив манифест, как показано ниже:

"requiredResourceAccess": [ 
{ 
    "resourceAppId": "{AppID}", 
    "resourceAccess": [ 
    { 
     "id": "{customOauth2PermissionsId}", 
     "type": "Scope" 
    } 
    ] 
}, 
{ 
    "resourceAppId": "00000002-0000-0000-c000-000000000000", 
    "resourceAccess": [ 
    { 
     "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6", 
     "type": "Scope" 
    } 
    ] 
} 
], 

2 .Затем мы можем получить маркер с помощью OAuth2 кода грант поток
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id={appId}&redirect_uri={redirectURL}&resource={appId}

POST:https://login.microsoftonline.com/common/oauth2/token 

enter image description here

Тем не менее, я не смог найти специальное разрешение, когда был пропущен access_token. Если вы хотите, чтобы обычный арендатор Azure AD поддерживал этот сценарий, вы можете отправить отзыв от here.

+0

Что такое 'customOauth2PermissionsId', @ fei-xue? –