У меня есть два сайта, оба в разных доменах. Так, например, http://example1.com и http://example2.com. Оба сайта находятся в ASP. NET и используют проверку подлинности с помощью форм. Пользователям example1.com требуется доступ к определенным ресурсам example2.com без необходимости иметь учетные записи в example2.com. Таким образом, всякий раз, когда пользователю example1.com требуется доступ к ресурсу в example2.com, создается временный URL-адрес, через который пользователь может получить доступ к ресурсу. URL-адрес - это ограниченный период времени для однократного использования, который становится недействительным после первого использования. Вот как это работает.
- Когда сайт example1.com должен получить доступ к ресурсу на сайте example2.com, в строке запроса появляется response.redirect с зашифрованным токеном в строке запроса. например, http://example2.com/path/resource1/?token= encryptedToken
- Этот токен читается на стороне example2.com, и если он действителен, для проверки подлинности форм устанавливается значение "temp user". «Temp User» - это пользователь с ограниченным доступом, созданный специально как прокси для пользователей example.com.
Ниже приведен код для достижения этого в событии Application_AuthenticateRequest
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
const string TempUser = "TempUser";
if (!Request.IsAuthenticated)
{
var url = Request.Url;
var token = Request.QueryString["token"];
if(IsKnownUrl(url) && IsValidToken(token))
{
FormsAuthentication.SetAuthCookie(TempUser, false);
Response.Redirect(Request.RawUrl);
}
}
}
private bool IsKnownUrl(string url){
//Logic to check the url is from known sources
}
private bool IsValidToken(string token){
//Logic to token is valid and not expired
}
Это работало нормально, пока оба сайта не были переведены на SSL. т.е. https://example1.com и https://example2.com. и это перестало работать. Response.Redirect с example1.com на example2.com переходит в 302 l oop, что означает, что по какой-то причине повар аутентификации ie не установлен или не принят. Когда я просматриваю сетевую активность в Chrome Инструментах разработчика браузера, я вижу следующий след
Имя статуса
https://example2.com/path/resource1/?token= encryptedToken 302
https://example2.com/path/resource1/?token= encryptedToken 302
https://example2.com/path/resource1/?token= encryptedToken 302
..................
Наконец браузер сдается и показывает, что страница перенаправляется слишком много раз.
Есть идеи, что может быть не так?