1

我正在使用 Visual Studio 2019 在 VB.NET 4.7.2 中创建一个应用程序。用户必须使用 OpenID Connect 对自己进行身份验证。

我已经使用 NuGet 包管理器下载了 IdentityModel 包,并尝试编写身份验证方法。

第一步之前:导入库

Imports System.Net
Imports IdentityModel.Client
Imports System.Threading.Tasks

第一步:令牌请求数据

Function Get_Token As String()

Dim request As TokenRequest = New TokenRequest
request.Address = "https://demo.identityserver.io/connect/token"
request.GrantType = "custom"
request.ClientId = "ClientID"
request.Parameters.Add("parameter1", "value1")
request.Parameters.Add("parameter2", "value2") 

第二步:为令牌请求调用异步函数。我必须使用异步函数,因为函数 RequestTokenAsync 的响应具有 Task(Of TokenResponse) 作为类型。我的问题是:这是正确的方法吗?我如何调用异步。函数,以便可以在调用函数中评估返回变量响应?

Call AsyncCall(request)

异步函数:不起作用并给出错误 NullReferenceException

Async Function AsyncCall(rqst As TokenRequest) As Task(Of TokenResponse)
Dim client As Http.HttpClient = New Http.HttpClient()
Dim response As TokenResponse = Await client.RequestTokenAsync(rqst)
Return response
End Function

异步函数将变量响应返回给函数 Get_Token 并进一步评估该变量:

第三步:响应评估 即使异步函数有“返回响应”以将变量响应返回给调用函数,但调用函数无法识别响应,我怎样才能正确返回变量响应

Get_Token = response.AccessToken
End Function

你能帮助我,或者告诉我任何方向吗?

4

1 回答 1

1

IdentityModel 编码模型不久前更改如下:

  • 不要使用 TokenClient - 改用 HttpClient
  • 使用 RequestTokenAsync 扩展方法 --> 你已经这样做了
  • 也使用 TokenRequest 对象 --> 你已经这样做了

这是预期的用法

于 2020-06-10T17:37:30.133 回答