Ejemplo n.º 1
0
        private static async Task <OAuthTokenCredential> TryGetOAuthTokenFromRefreshTokenAsync(TokenClient tokenClient, string authority, string refreshToken)
        {
            // when a refresh token is present try to use it to acquire a new access token
            if (!string.IsNullOrEmpty(refreshToken))
            {
                var tokenResponse = await tokenClient.RequestRefreshTokenAsync(refreshToken).ConfigureAwait(false);

                if (!tokenResponse.IsError)
                {
                    // TODO: discover userinfo endpoint via ".well-known/openid-configuration"
                    var infoClient = new UserInfoClient(authority + "/connect/userinfo");
                    var userInfo   = await infoClient.GetAsync(tokenResponse.AccessToken).ConfigureAwait(false);

                    return(OAuthTokenCredential.CreateWithClaims(
                               userInfo.Claims,
                               tokenResponse.AccessToken,
                               DateTime.UtcNow + TimeSpan.FromSeconds(tokenResponse.ExpiresIn),
                               tokenResponse.RefreshToken));
                }
            }

            return(null);
        }