Мне нужно реализовать следующую аутентификацию на моем asp.net: пользователь на сайтах ASP.NET и PHP должен проходить аутентификацию с использованием OpenID. Логин и регистрация существует только на сайте PHP. ТАК требования:
- Мой сайт ASP.NET должен перенаправить на сайт PHP для аутентификации. Пользователь будет
аутентифицируется с использованием OpenID с сайта PHP.
- Если пользователь новый (я планирую использовать куки) на мой сайт ASP.NET, он будет перенаправлять с пустым
В параметре. В противном случае я передаю сохраненный OpenID в запросе на перенаправление.
- Веб-сайт PHP показывает пользователю страницу входа в систему, если переданный OpenID пуст, и позволяет пользователю проходить аутентификацию и регистрироваться. Если переданный OpenID не пуст. веб-сайт PHP должен проверить его действительное состояние.
- Только если аутентификация / регистрация прошла успешно, сайт PHP перенаправляет обратно на мой сайт ASP.NET OpenID, который я буду использовать для пользователя.
- Этот процесс, конечно, должен быть безопасным.
Я обнаружил, что проверка подлинности должна быть реализована в Global.asax в событии Application_AuthenticateRequest с использованием FormAuthentication. Я планирую это так
protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
if(HttpContext.Current.User != null) {
// Extract the forms authentication cookie if exists.
// Redirects to the php website using the OpenID extracted from the cookies, or empty.
// Pass also a new generated token to secure the communication.
} else {
// Store a new GeneralPrincipal to the HttpContext.Current.User.
}
}
protected void Application_BeginRequest(Object sender, EventArgs e) {
// Check for the redirected back token and OpenID.
// Create FormsAuthenticationTicket for the openid and store it in the cookie.
}
Проблема в том, что я не могу сохранить сгенерированный токен в Session, потому что SessionState не инициализируется в то время.
Какова наилучшая практика для решения вышеуказанных требований?