IdentityModel RequestRefreshTokenAsync方法始终返回invalid_client



我有以下代码:

public async Task<TokenResponse> RefreshTokenAsync(string refreshToken)
{
HttpClient client = new();
var discoveryResponse = await client.GetDiscoveryDocumentAsync("https://localhost:44334");
var response = await client.RequestRefreshTokenAsync(new RefreshTokenRequest
{
Address = discoveryResponse.TokenEndpoint,
ClientId = "...",
ClientSecret = "...",
RefreshToken = refreshToken
});
return response;
}

并且它总是返回带有invalid_client消息的400 Bad Request。当我在Postman中刷新代币时,效果很好。问题出在哪里?

刷新令牌的目的是:用户不需要在每次会话到期时使用应用程序中的凭据(用户名/密码(重新进行身份验证。因此,您的应用程序需要连接到端点标识,并在令牌或刷新令牌超时之前使用新的刷新令牌。在asp中,核心标识和JwtToken总是有一个默认的超时值;不管怎样:您需要在超时到期之前捕获刷新令牌,否则您的身份将理解未打开浏览器或未联机的用户。这可能意味着开发一个留在Roudin-Robin中的例程,在浏览器打开时总是用新的Token刷新应用程序。

我将代码更改为:

public async Task<TokenResponse> RefreshTokenAsync(string refreshToken)
{
HttpClient client = new();
var discoveryResponse = await client.GetDiscoveryDocumentAsync("https://localhost:44334");
var tokenClient = new TokenClient(client, new TokenClientOptions
{
Address = discoveryResponse.TokenEndpoint,
ClientId = "...",
ClientSecret = "...",
});
var response = await tokenClient.RequestRefreshTokenAsync(refreshToken);
response.HttpResponse.EnsureSuccessStatusCode();
return response;
}

现在它如预期的那样工作。

相关内容

  • 没有找到相关文章

最新更新