Asp.net使用令牌和RefreshToken问题进行身份验证

时间:2019-01-22 17:08:53

标签: asp.net login webforms token refresh-token

我正在使用带有表单身份验证的WebForms。我正在将我的应用程序与rest api令牌机制连接。 我的问题是我想使用我的refreshtoken来请求新的访问令牌。 我目前正在Global.asax Application_AuthenticateRequest方法中完成此工作。 当我获得accesstoken时,我会更新票证,但会将我重定向到登录页面。 我尝试使用Response.Redirect,但我被重定向到原始URL,但是我丢失了页面的状态。好像我已重新加载页面。有人知道我在做什么错吗? 以下是我在VB.net中的global.asax代码: 谢谢!

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

0 个答案:

没有答案