Как устранить ошибку «Ключ недействителен для использования в указанном состоянии» при использовании Azure ACS? - PullRequest
3 голосов
/ 14 июня 2011

Я пытаюсь заставить OpenID-аутентификацию работать в моем приложении Azure ASP.NET MVC 3 и выполнил шаги, описанные в MVC 3 Custom Login Sample *, чтобы сделать это. Все отлично работает в среде разработки, но не при развертывании на платформе Azure.

Первая проблема началась с аутентификации, вызвавшей ошибку «Ключ недопустим для использования в указанном состоянии» . В обсуждении здесь говорится, что приложение должно быть настроено на использование RsaEncryptionCookieTransform вместо DPAPI, который используется по умолчанию. Чтобы попытаться решить эту проблему, я добавил код для OnServiceConfigurationCreated, описанный в блоге Алика Левина , но не пошел дальше, поскольку он описывает настройку самоподписанного сертификата в процессе разработки (который, как уже упоминалось, не было необходимо), а не в Azure.

Вместо этого я попытался использовать сертификат X.509 уже в Azure. Я обнаружил отпечаток в Windows Azure Management> Служба контроля доступа> Приложения проверяющей стороны> (Имя моего приложения)> Сертификаты подписи токена> Используется для пространства имен службы (Сертификат X.509). Затем я добавил эту ссылку в web.config:

<serviceCertificate>
    <certificateReference x509FindType="FindByThumbprint" findValue="8A417..." />
</serviceCertificate>

Теперь при запуске приложения появляется ошибка конфигурации:

ID1024: The configuration property value is not valid.
Property name: 'certificateReference'
Error: 'ID1025: Cannot find a unique certificate that matches the criteria.
StoreName: 'My'
StoreLocation: 'LocalMachine'
X509FindType: 'FindByThumbprint'
FindValue: '8A417...''

Мне действительно нужно изменить метод шифрования, чтобы устранить ошибку «Ключ недействителен для использования в указанном состоянии»? Если да, как я могу использовать сертификат X.509, уже существующий в Azure, для шифрования файлов cookie?

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Сертификат, на который вы ссылаетесь, является сертификатом подписи токена, используемым ACS.Вам нужен сертификат, развернутый в вашей веб-роли, чтобы WIF мог использовать его для шифрования файлов cookie (это никак не связано с токеном).Вам придется добавить сертификат в развертывание Windows Azure.(Настройка службы).

См. Пример № 5 в http://claimsid.codeplex.com

Если это подтверждение концепции, и вы хотите просто запустить со всеми значениями по умолчанию.Смотрите здесь: http://msdn.microsoft.com/en-us/library/ff966484.aspx#sec3

Вам нужно установить «Load User Profile = true», чтобы DPAPI работал.(Это, вероятно, то, что у вас есть на вашем локальном компьютере).

1 голос
/ 17 июня 2011

В конце концов я нашел (снова) статью Защита веб-роли Windows Azure Веб-приложение ASP.NET с использованием службы контроля доступа v2.0 . После перенастройки web.config и раздела «Приложения проверяющей стороны» на портале управления ACS в соответствии с этой статьей я смог заставить все работать. В частности, я хотел, чтобы только те действия контроллера, отмеченные RequireAuthentication, как показано в примере ACS 2.0 для этого урока , требовали, чтобы пользователь вошел в систему. Теперь это работает.

Единственным недостатком является то, что все приложение должно работать в SSL для обеспечения бесперебойного взаимодействия с пользователем. В противном случае у пользователя запрашивается авторизация при запуске в HTTP, аутентифицируется, а затем возвращается обратно в HTTP, очевидно, не аутентифицированный. Однако при переключении на конечную точку SSL пользователь прошел аутентификацию!

В среде разработки это работало, как я хотел, в стиле переполнения стека, где я мог запускать все в стандартном HTTP без использования сертификата, и аутентификация происходила через SSL. Однако из-за требования к файлам cookie RSA в Azure и необходимости в сертификате это не будет работать в облаке. (Было бы замечательно, если бы dev fabric предупредил об этом и других общих ошибках .) Я надеюсь вернуться к этому в какой-то момент в будущем.

Итак, я рекомендую вам ознакомиться с Windows Identity Foundation и узнать, как он применяется к Azure, прежде чем предпринимать какие-либо действия, помимо предоставленных примеров. Некоторые ресурсы, доступные на момент написания:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...