Я просто следовал следующим инструкциям здесь .
и нашел несколько записей в блогах здесь и здесь , которые будут весьма полезны.
Но у меня все еще возникают странные проблемы с моим приложением ASP.NET MVC3, работающим в Azure на конечной точке HTTPS.У меня загружен сертификат HTTPS, и он достаточно долго развертывается на одном экземпляре роли без каких-либо проблем.Однако совсем недавно я начал развертывать несколько экземпляров и столкнулся с «Ключом, недопустимым для использования в указанном состоянии», и «Значение не может быть нулевым.Имя параметра: ошибки сертификата.
Но теперь у меня есть новый:
'Невозможно прочитать за пределы потока.'
Выглядит довольно ванильно.Не становится очевидным, что проблема заключается в переходе от DPAPI к преобразованию cookie RSA, пока вы не посмотрите на трассировку стека.
[EndOfStreamException: невозможно прочитать за пределами конца потока.] System.IO.MemoryStream.InternalReadInt32 () +12750266 Microsoft..IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken (XmlReader читатель, SecurityTokenResolver tokenResolver) +862 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken (байт [] маркер, SecurityTokenResolver tokenResolver) +109 Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie (Байт []sessionCookie) +356 Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie (SessionSecurityToken & sessionToken) +123 Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest (отправитель объекта, EventArgs EventArgs): +61 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +80 System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, булева & completedSynchronously) + 270
Я добавил следующий код в global.asax:
void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
//
// Use the <serviceCertificate> to protect the cookies that are sent to the client.
//
List<CookieTransform> sessionTransforms = new List<CookieTransform>(
new CookieTransform[] {
new DeflateCookieTransform(),
new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate) });
SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
}
, а также этот код:
void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
// In the Windows Azure environment, build a wreply parameter for the SignIn request
// that reflects the real address of the application.
HttpRequest request = HttpContext.Current.Request;
Uri requestUrl = request.Url;
StringBuilder wreply = new StringBuilder();
wreply.Append(requestUrl.Scheme); // e.g. "http" or "https"
wreply.Append("://");
wreply.Append(request.Headers["Host"] ?? requestUrl.Authority);
wreply.Append(request.ApplicationPath);
if (!request.ApplicationPath.EndsWith("/")) wreply.Append("/"); e.SignInRequestMessage.Reply = wreply.ToString();
}