Локальный перезапуск asp.net с Oauth — провайдер вошел в систему, но сеанс потерян

Я разрабатываю приложение asp.net для dropbox, и оно работает, по крайней мере, в режиме локального хоста. Но я столкнулся с проблемой, которая, я надеюсь, возникает только во время тестирования на локальном хосте и не будет (НЕ МОЖЕТ) возникать в производстве. Это немного сложно объяснить, поэтому я опишу это по шагам.

1) Браузер не запущен, и я запускаю «целевую страницу входа в систему» ​​в отладчике. Он запрашивает у Dropbox логин и разрешение. В настоящее время в моем классе, производном от Oauth, я храню свой объект раскрывающегося списка с токеном доступа и секретом в переменной сеанса.

2) На моей фактической странице «Вход в систему» ​​я извлекаю объект из сеанса и начинаю использовать Dropbox, и он отлично работает.

3) Теперь предположим, что я прекращаю отладку из Visual Studio 2012. Внесите некоторые изменения в код. Теперь я начинаю снова. На этот раз браузер уже вошел в систему в Dropbox, и целевая страница отображается в системе. Я не вижу приглашения «Разрешить» из Dropbox. Но теперь нет переменной сеанса для извлечения моего объекта раскрывающегося списка, потому что это новый сеанс. Но для dropbox это уже зарегистрированный сеанс.

Я хочу подтвердить, что эта ситуация может возникнуть только во время работы локального хоста и не может возникнуть в реальном рабочем приложении, потому что оно всегда будет идти с веб-сайта в браузере, у которого будет свой собственный сеанс. Или может возникнуть? Какое решение в таком случае.

Еще одно сомнение заключается в том, почему Dropbox не запрашивает приглашение «Разрешить» в следующий раз, если браузер открыт, но приложение начинает новый сеанс. Он должен откуда-то получать тот же токен доступа и секрет. Откуда?


person user2911419    schedule 30.10.2013    source источник


Ответы (1)


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

                FormsAuthentication.SignOut();
                Response.Redirect("/");
                return;
person user2911419    schedule 31.10.2013