Настройте облачный сервис для проверки подлинности с помощью Azure Active Directory

У меня есть один облачный сервис для арендаторов, который я хочу сделать доступным только для сотрудников моей компании. Решение имеет веб-роль и рабочую роль.

Web.Config

<add key="ida:Tenant" value="MyCompany.onmicrosoft.com" />
<add key="ida:Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<add key="ida:ClientID" value="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<add key="ida:Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:44322/" />

Кроме того, я получил те же настройки в Cloud.config:

<Setting name="ida.Tenant" value="MyCompany.onmicrosoft.com" />
<Setting name="ida.Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<Setting name="ida.ClientID" vvalue="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<Setting name="ida.Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<Setting name="ida.AADInstance" value="https://login.microsoftonline.com/{0}" />
<Setting name="ida.PostLogoutRedirectUri" value="https://localhost:44322/" />

Переходим к Startup.Auth.cs

   public void ConfigureAuth(IAppBuilder app)
    {
        string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions());    
        app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    RedirectUri = postLogoutRedirectUri,

                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        AuthenticationFailed = context =>
                        {
                            context.HandleResponse();
                            context.Response.Redirect("/Error?message=" + context.Exception.Message);
                            return Task.FromResult(0);
                        }
                    }

                });
        }

Наконец, в моем контроллере есть тег [Authorize].

В настройке Azure Active Directory я зарегистрировал свой облачный сервис. Тип приложения - Web-приложение / API, а Multi-tenanted - "Нет". URL выхода из системы имеет значение https://localhost:44322/Account/EndSession. Я не менял и не редактировал Манифест. введите описание изображения здесь введите описание изображения здесь

Когда я пытаюсь войти в облачный сервис, меня перенаправляют на страницу входа в мою организацию (пока все хорошо), но после ввода пароля меня приветствует сообщение об ошибке.

У нас возникли проблемы при входе в систему. Мы получили незаконный запрос. (свободно переведено)

Идентификатор корреляции: 21f4089f-1952-4f57-aead-173a66c1408d Метка времени: 2016-09-26 10:24:14Z AADSTS90093: для этого приложения требуются разрешения для другого приложения. Согласие на получение разрешений для приложений может выполнять только администратор. Выйдите из системы и войдите как администратор или свяжитесь с одним из администраторов вашей организации.

URL для запроса на вход в систему выглядит следующим образом (сцена, где я ввожу свой пароль);

https://login.microsoftonline.com/ fd2xxxxx-xxxx-xxxx-xxxxxxxf3f2 / oauth2 / authorize? client_id = 444xxxxx-xxxx-xxxx-xxxxxxxx024 & redirect_uri = https% 3a% 2f% 2flocalhost% 3 & & amp; +id_token &scope=openid+profile&state=OpenIdConnect.AuthenticationProperties %3dYkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Я рассмотрел два примера решений на основе веб-приложений, которые можно найти по адресу https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect и https://github.com/Azure-Samples/active-directory-dotnet-webapp-multitenant-openidconnect

Я был бы очень благодарен за любую помощь в этом вопросе

1 ответ

Оказывается, мне нужно отредактировать свой манифест в регистрации приложения Azure Active Directory:

"requiredResourceAccess": [
    {
      "resourceAppId": "00000002-0000-0000-c000-000000000000",
      "resourceAccess": [
        {
          "id": "311a71xxxx-xxxx-xxxx-xxxx7156d8e6",
          "type": "Scope"
        },
        {
          "id": "5778995axxxx-xxxx-xxx-xxxx63a9f3f4d04",
          "type": "Role"
        }

Когда я удалил последнюю запись (роль, возможно, рабочую роль), у меня появилось окно с предложением предоставить мне права на чтение приложения для моего профиля Azure AD. После ответа OK меня перенаправили на localhost:44322 с 404. Решением этой проблемы было удаление ключа postLogoutRedirectUri из файлов конфигурации, а также удаление двух строк в Startup.Auth.cs.

//PostLogoutRedirectUri = postLogoutRedirectUri,
//RedirectUri = postLogoutRedirectUri,

Теперь он работает как задумано:)

Другие вопросы по тегам