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

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

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

Вместо этого я попытался использовать сертификат X.509 уже в Azure. Я нашел отпечаток в разделе Windows Azure Management> Access Control Service> Relying Party Applications> (My Application Name)> Token Signing Certificates> Used for Service Namespace (X.509 Certificate). Затем я добавил эту ссылку в 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?


person Alex Angas    schedule 14.06.2011    source источник


Ответы (2)


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

См. Образец № 5 на сайте http://claimsid.codeplex.com

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

Вам необходимо установить «Загрузить профиль пользователя = true», чтобы DPAPI работал. (Вероятно, это то, что у вас есть на вашем локальном компьютере).

person Eugenio Pace    schedule 14.06.2011
comment
Посмотрев на образец и прочитав дополнительную документацию на этом сайте Codeplex, я теперь понимаю больше об этом. Я создал и загрузил сертификат , следуя этим инструкциям. У меня больше нет ошибки, просто ссылка «Войти» ничего не делает на платформе Azure. - person Alex Angas; 15.06.2011
comment
Рад слышать, что это было полезно. Вы работаете в локальном эмуляторе Azure? (вам, вероятно, следует начать с этого места перед развертыванием в облаке) Куда указывает ссылка для входа? - person Eugenio Pace; 15.06.2011
comment
У меня все работало в локальном эмуляторе без сертификата и каких-либо проблем, только при развертывании в Azure я столкнулся со всей этой проблемой! Я делаю это в качестве доказательства концепции, поэтому может не хватить времени на это, но я попробую еще раз вернуться и заставить эту часть работать. - person Alex Angas; 16.06.2011

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

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

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

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

person Alex Angas    schedule 16.06.2011
comment
Я столкнулся с той же проблемой, что и вы, я следил за руководствами, которые вы опубликовали, но у меня есть вопрос к вам. Вас перенаправляли в Контроль доступа каждый раз, когда вы запускали свой проект в Visual Studio. Если да, то как вы это обошли? И посетители вашего сайта каждый раз перенаправлялись в царство или только в среде разработки. - person Bombcode; 17.11.2011
comment
@Bombcode Это было слишком давно, чтобы я мог вспоминать подробности, извините. Однако я помню, что поведение ACS было разным в зависимости от того, работал ли я в среде разработки или на платформе Azure. - person Alex Angas; 17.11.2011
comment
Хорошо, спасибо, Алекс, после дальнейшей отладки я обнаружил проблему. Я отказал всем пользователям. Я разрешил всем пользователям сейчас и заблокировал определенные области сайта. - person Bombcode; 18.11.2011