如何获取新的刷新令牌 - Identity Server 4

How to get new refresh token - Identity Server 4

我目前正在制作一个 WPF 应用程序并使用 Identity Server 4 进行身份验证。现在我已经全部正常工作,以便用户在旧令牌过期时使用刷新令牌获得新令牌:

            //request new token
            using (var newAccessTokenClient = new HttpClient())
            {
                var newAccessTokenResponse = await newAccessTokenClient.RequestRefreshTokenAsync(new RefreshTokenRequest
                {
                    Address = App.Current.Properties["IdentityServerAPIAddress"].ToString() + "connect/token",

                    ClientId = "wpf",
                    ClientSecret = "secret",
                    GrantType = "refresh_token",
                    Scope = "openid offline_access WebAPI",

                    RefreshToken = ReadRefreshToken()
                });

                if (newAccessTokenResponse.IsError)
                {
                    throw new Exception(newAccessTokenResponse.Exception.ToString());
                }
                else
                {
                    //refresh token was success, write new tokens
                    WriteTokens(newAccessTokenResponse.AccessToken, newAccessTokenResponse.RefreshToken);
                    App.Current.Properties["AccessToken"] = newAccessTokenResponse.AccessToken;
                }
            }

问题是每当它第二次发生时,Identity Server 4 API 会抱怨刷新令牌已被使用。我如何获得新的刷新令牌?

我看过这个关于我可以实现的接口的文档,但我不知道如何使用它。

感谢任何帮助。谢谢

当您使用刷新令牌请求新的访问令牌时,您应该在同一响应中取回新的刷新令牌。请检查 Fiddler 中的请求。

您还可以使用此客户端设置控制 IdentityServer 如何处理刷新令牌:

            RefreshTokenUsage = TokenUsage.OneTimeOnly,