情況是這樣的。
后面使用oauth 身份認證是 client_credentials 前端是小程式
每一個小程式用戶登錄后會獲取一個token,然后請求其它api帶上這個token
現在發現,有時請求api資料會是另一個用戶的。
如:
A 登錄后,在發入token 時,會記錄以下資訊
Public Overrides Function GrantClientCredentials(context As OAuthGrantClientCredentialsContext) As Task
Dim oAuthIdentity = New ClaimsIdentity(context.Options.AuthenticationType)
oAuthIdentity.AddClaim(New Claim("code", Me.logininfo.code))
Dim ticket = New AuthenticationTicket(oAuthIdentity, New AuthenticationProperties())
context.Validated(ticket)
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", {"*"})
Return MyBase.GrantClientCredentials(context)
End Function
然后A請求其它api時,會 呼叫 Dim ClaimsPrincipal As ClaimsPrincipal = HttpContext.Current.User 來獲取code的值。但是有時A獲取的就是另一個用戶的值了。
uj5u.com熱心網友回復:
除錯兩個用戶獲取的token,是不同的嗎?uj5u.com熱心網友回復:
只是偶爾是這樣,我想問一下,我的寫法有沒有問題。
uj5u.com熱心網友回復:
那就肯定有問題了。偶爾只是說明你并發量不大,但是肯定使用到了共享資源導致的。
你把Return MyBase.GrantClientCredentials(context)拿出來看看,是怎么寫的。
看一下整個的class
uj5u.com熱心網友回復:
是不是用了全域靜態變數/方法,并且還沒加鎖uj5u.com熱心網友回復:
是不是用了全域靜態變數/方法,并且還沒加鎖
Public Class Helper
Shared Function GetLoginInfo() As LoginInfo
Dim l As New LoginInfo
If Not HttpContext.Current Is Nothing Then
Dim ClaimsPrincipal As ClaimsPrincipal = HttpContext.Current.User
For Each c In ClaimsPrincipal.Claims
Select Case c.Type
Case "Role"
l.Role = c.Value
Case "ID"
l.ID = CInt(c.Value)
Case "LoginName"
l.LoginName = c.Value
Case "NickName"
l.NickName = c.Value
Case "clientno"
l.clientno = c.Value
Case "code"
l.code = c.Value
Case "db"
l.db = c.Value
Case "restfulurl"
l.restfulurl = c.Value
Case "ver"
l.ver = c.Value
End Select
Next
Else
End If
Return l
End Function
這個是靜態方法,會不會是這個造成的。
End Class
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/34579.html
標籤:VB.NET
上一篇:求助C# 啟動release報“路徑的形式不合法",“System.ArgumentException”型別的第一次機會例外在 mscorlib.dll 中發生
