Ejemplo n.º 1
0
        public async Task <bool> AuthenticateAsync(bool force, CancellationToken ct = default)
        {
            // https://dev.onedrive.com/auth/msa_oauth.htm
            if (!force && _accessCode != null)
            {
                return(IsAuthenticated);
            }

            if (await RefreshAccessTokenAsync(ct).ConfigureAwait(false))
            {
                return(IsAuthenticated);
            }

            var authorizationCode = AuthorizationProvider.GetAuthorizationCode(this);

            if (authorizationCode != null)
            {
                var parameters = new Dictionary <string, string>(StringComparer.Ordinal);
                parameters["client_id"]    = ApplicationId;
                parameters["redirect_uri"] = ReturnUrl;
                //parameters["client_secret"] = "";
                parameters["code"]       = authorizationCode;
                parameters["grant_type"] = "authorization_code";
                var result = await PostAsync <OneDriveToken>("https://login.live.com/oauth20_token.srf", new FormUrlEncodedContent(parameters), ct).ConfigureAwait(false);
                await HandleTokenResponseAsync(result, ct).ConfigureAwait(false);
            }

            return(IsAuthenticated);
        }