Example #1
0
        internal async Task RefreshAsync()
        {
            var accessToken  = _accessTokenStorage.Load();
            var refreshToken = accessToken?.RefreshToken;

            if (refreshToken == null)
            {
                return;
            }

            var requestTime = DateTime.Now;

            var refreshResult = await _authorizationProvider.RefreshAsync(refreshToken);

            accessToken = new AccessToken
            {
                Value        = refreshResult.AccessToken,
                ExpiresAt    = requestTime.AddSeconds(refreshResult.ExpiresIn).AddMinutes(-5),// 5 分钟用作缓冲
                TokenType    = refreshResult.TokenType,
                Scope        = refreshResult.Scope,
                RefreshToken = refreshResult.RefreshToken,
                UserId       = accessToken.UserId
            };
            _accessTokenStorage.Save(accessToken);
        }
        internal async Task <AccessToken> SignInAndGetAccessTokenAsync()
        {
            var accessToken = GetAccessToken();

            if (accessToken != null)
            {
                return(accessToken);
            }

            var requestTime         = DateTime.Now;
            var authorizationUri    = new Uri($"https://api.weibo.com/oauth2/authorize?client_id={_weiboOptions.AppKey}&redirect_uri={_weiboOptions.RedirectUri}");
            var authorizationResult = await _authorizationProvider.AuthorizeAsync(authorizationUri, new Uri(_weiboOptions.RedirectUri));

            accessToken = new AccessToken()
            {
                ExpiresAt = requestTime.AddSeconds(authorizationResult.ExpiresIn).AddMinutes(-5),// 5 分钟用作缓冲
                UserId    = authorizationResult.UserId,
                Value     = authorizationResult.AccessToken
            };
            _accessTokenStorage.Save(accessToken);
            return(accessToken);
        }