Добавление аутентификации на статический веб-сайт Azure

У нас есть веб-сайт Azure, на котором размещен статический сайт (только некоторые HTML, CSS, Javascript), который затем взаимодействует с нашими мобильными службами Azure с помощью вызовов AJAX.

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

Пожалуйста, порекомендуйте самый простой способ сделать это.

Или, может быть, есть какой-то лучший вариант для обслуживания статического контента, кроме веб-сайтов Azure?


person Giorgi Kandelaki    schedule 12.07.2013    source источник


Ответы (2)


Очень простая форма аутентификации со статическим именем пользователя и паролем может быть достигнута путем использования аутентификации и авторизации ASP.NET, интегрированных с IIS, как описано в этой статье: Примените правила аутентификации и авторизации ASP.NET к статическому содержимому с помощью функции интегрированного конвейера IIS 7.0.

В качестве примера см. этот образец проекта GitHub. Соответствующие фрагменты кода - это файл Web.config, который вы должны поместить в корневой каталог (который будет общедоступным):

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="false" />
        <authentication mode="Forms">
            <forms>
                <credentials passwordFormat="Clear">
                    <user name="Alice" password="secret" />
                </credentials>
            </forms>
        </authentication>
        <!-- Unless specified in a sub-folder's Web.config file, 
             any user can access any resource in the site -->
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
    <system.webServer>
        <modules>
            <remove name="FormsAuthenticationModule" />
            <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />            
            <remove name="UrlAuthorization" />
            <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
        </modules>
    </system.webServer>
</configuration>

И этот файл Web.config, который вы можете поместить в подкаталог (который будет ограничен):

<?xml version="1.0"?>
<configuration>
    <system.web>
        <!-- Anonymous users are denied access to this folder (and its subfolders) -->
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

Вам также понадобится файл Login.aspx с формой HTML и логикой аутентификации на стороне сервера. См. Пример в файле Login.aspx в образце проекта.

Таким образом вы сможете размещать как общедоступные файлы на корневом уровне, так и частные файлы в подкаталогах. Если вы хотите защитить даже корневой уровень, просто настройте правила авторизации соответствующим образом.

Документацию по параметрам конфигурации см. На этих страницах MSDN:

person Fernando Correia    schedule 12.07.2013
comment
Это действительно работает. Спасибо, Фернандо. Еще один вопрос, если не возражаете. Я хочу защитить все файлы даже на корневом уровне. Итак, я изменил первый Web.config (который находится на корневом уровне) следующим образом: <allow users="Alice" />. Теперь, когда я перехожу на mysite.azurewebsites.net/index.html, он перенаправляется на Login.aspx , поэтому он работает правильно. Но когда я перехожу на mysite.azurewebsites.net (без указания index.html), отображается index.html но без стилей и изображений. Я никогда не работал с IIS и .NET, так что не могли бы вы поскорее исправить и это? Спасибо. - person Giorgi Kandelaki; 16.07.2013
comment
Мы устранили эту проблему, добавив раздел <deny users="?" />, <authorization>. Еще раз спасибо, Фернандо, за ответ. - person Giorgi Kandelaki; 17.07.2013
comment
Правильно, эта конфигурация блокирует анонимных пользователей. Извините, я не смог ответить раньше. Я обновил свой ответ ссылками на дополнительную документацию по параметрам конфигурации. - person Fernando Correia; 17.07.2013
comment
@FernandoCorreia Я пробовал это, но меня напрямую перенаправили на private.html, он не запрашивает имя пользователя и пароль. Я разместил это на лазурном статическом веб-сайте. Пожалуйста, помогите мне, что я делаю неправильно. - person ashish; 18.09.2020
comment
@GiorgiKandelaki Я пробовал это, но меня напрямую перенаправили на private.html, он не запрашивает имя пользователя и пароль. Я разместил это на лазурном статическом веб-сайте. Пожалуйста, помогите мне, что я делаю неправильно. - person ashish; 18.09.2020

Это старый вопрос, на который ранее уже был дан ответ, но если вы ищете простейшее возможное решение, не требующее изменений кода или конфигурации, вы можете использовать аутентификацию / авторизацию веб-сайтов Azure (отказ от ответственности, я помогал создавать эту функцию). Вот несколько ссылок:

Сообщение в блоге: http://azure.microsoft.com/blog/2014/11/13/azure-websites-authentication-authorization/

Демонстрационное видео: http://azure.microsoft.com/en-us/documentation/videos/azure-websites-easy-authentication-and-authorization-with-chris-gillum/

РЕДАКТИРОВАТЬ: И вот более недавняя запись в блоге, описывающая, как вы можете использовать социальных провайдеров (Twitter, Facebook, Google, учетные записи Microsoft) в дополнение к Azure AD по умолчанию: https://azure.microsoft.com/en-us/blog/announcing-app-service-authentication-authorization/ < / а>

person Chris Gillum    schedule 23.01.2015