Аутентификация форм Asp.net с помощью токена и проблемы RefreshToken - PullRequest
0 голосов
/ 22 января 2019

Я использую WebForms с аутентификацией форм. Я связываю свое приложение с механизмом токенов остальных API. Моя проблема в том, что я хочу запросить мой новый токен доступа, используя мой тотал обновления. В настоящее время я делаю эту работу в методе Global.asax Application_AuthenticateRequest. Когда я получаю маркер доступа, я обновляю билет, но меня перенаправляют на страницу входа. Я пытаюсь использовать Response.Redirect, и я перенаправлен на исходный URL, но я потерял состояние страницы. Это как если бы я перезагрузил страницу. Кто-нибудь знает, что я делаю не так? Ниже мой код global.asax в VB.net: Спасибо!

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)

    Try
        If Request.Cookies(FormsAuthentication.FormsCookieName) IsNot Nothing Then
            Dim authCookie As HttpCookie = (Request.Cookies(FormsAuthentication.FormsCookieName))
            If Not String.IsNullOrEmpty(authCookie.Value) Then
                Dim ticket = FormsAuthentication.Decrypt(authCookie.Value)
                If ticket.Expired Then
                    'reauth cookie Is My refreshtoken
                    If Request.Cookies("reAuthCookie") IsNot Nothing Then
                        Dim funciones As New Funciones.Usuarios
                        Dim reAuthCookie As HttpCookie = Request.Cookies("reAuthCookie")
                        If Not String.IsNullOrEmpty(reAuthCookie.Value) Then
                            Dim refreshToken As String = reAuthCookie.Value(0).ToString
                            Dim login As Entidades.Login = funciones.renovarAccessToken(refreshToken)
                            Dim ticketExpiration As Date
                            ticketExpiration = Date.Now.AddSeconds(CDbl(login.Expires_in) - 20)
                            Dim userData As String = Newtonsoft.Json.JsonConvert.SerializeObject(login)
                            ticket = New FormsAuthenticationTicket(1, login.Username, DateTime.Now,
                                                                           ticketExpiration, True,
                                                                           userData, FormsAuthentication.FormsCookiePath)
                            Dim encTicket As String = FormsAuthentication.Encrypt(ticket)
                            HttpContext.Current.Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, encTicket))
                            Response.Cookies.Remove("reAuthCookie")
                            reAuthCookie.Expires = Now.AddMonths(2)
                            reAuthCookie.Path = "/"
                            reAuthCookie.Value = login.Refresh_token
                            Response.Cookies.Add(reAuthCookie)
                        End If
                    End If
                End If
            End If
        Else
            If Request.Cookies("reAuthCookie") IsNot Nothing Then
                Dim funciones As New Funciones.Usuarios
                Dim reAuthCookie As HttpCookie = Request.Cookies("reAuthCookie")
                If Not String.IsNullOrEmpty(reAuthCookie.Value) Then
                    Dim refreshToken As String = reAuthCookie.Value.ToString
                    Dim login As Entidades.Login = funciones.renovarAccessToken(refreshToken)
                    Dim ticketExpiration As Date
                    ticketExpiration = Date.Now.AddSeconds(CDbl(login.Expires_in) - 20)
                    Dim userData As String = Newtonsoft.Json.JsonConvert.SerializeObject(login)
                    Dim ticket = New FormsAuthenticationTicket(1, login.Username, DateTime.Now,
                                                                           ticketExpiration, True,
                                                                           userData, FormsAuthentication.FormsCookiePath)
                    Dim encTicket As String = FormsAuthentication.Encrypt(ticket)
                    Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, encTicket))
                    Response.Cookies.Remove("reAuthCookie")
                    reAuthCookie.Expires = Now.AddMonths(2)
                    reAuthCookie.Path = "/"
                    reAuthCookie.Value = login.Refresh_token
                    Response.Cookies.Add(reAuthCookie)
                End If
            End If
        End If
    Catch ex As Exception
        Throw ex
    End Try
End Sub
...