示例#1
0
        /// <summary>
        /// Performs the refresh request using the provided refresh token
        /// </summary>
        /// <param name="refreshToken"></param>
        /// <returns></returns>
        protected async Task <OAuthSession> ExchangeRefreshToken(string refreshToken)
        {
            if (string.IsNullOrWhiteSpace(refreshToken))
            {
                throw new ArgumentException("Refresh token cannot be null or empty", "refreshToken");
            }

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.RefreshToken)
                                    .Payload(Constants.RequestParameters.RefreshToken, refreshToken)
                                    .Payload(Constants.RequestParameters.ClientId, _config.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _config.ClientSecret)
                                    .Payload(Constants.RequestParameters.BoxDeviceId, _config.DeviceId)
                                    .Payload(Constants.RequestParameters.BoxDeviceName, _config.DeviceName);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            if (boxResponse.Status == ResponseStatus.Success)
            {
                // Parse and return the new session
                boxResponse.ParseResults(_converter);
                return(boxResponse.ResponseObject);
            }

            // The session has been invalidated, notify subscribers
            OnSessionInvalidated();

            // As well as the caller
            throw new BoxSessionInvalidatedException()
                  {
                      StatusCode = boxResponse.StatusCode,
                  };
        }
        /// <summary>
        /// Get a down scoped token.
        /// </summary>
        /// <returns>The down scoped access token.</returns>
        public string Exchange()
        {
            BoxRequest boxRequest = new BoxRequest(new Uri(Constants.BoxApiHostUriString), Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload(Constants.RequestParameters.SubjectToken, token)
                                    .Payload(Constants.RequestParameters.SubjectTokenType, Constants.RequestParameters.AccessTokenTypeValue)
                                    .Payload(Constants.RequestParameters.Scope, scope)
                                    .Payload(Constants.RequestParameters.Resource, resourceUrl)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.TokenExchangeGrantTypeValue);

            if (actorToken != null)
            {
                boxRequest = boxRequest.Payload(Constants.RequestParameters.ActorToken, actorToken)
                             .Payload(Constants.RequestParameters.ActorTokenType, Constants.RequestParameters.IdTokenTypeValue);
            }

            var handler   = new HttpRequestHandler();
            var converter = new BoxJsonConverter();
            var service   = new BoxService(handler);

            IBoxResponse <OAuthSession> boxResponse = service.ToResponseAsync <OAuthSession>(boxRequest).Result;

            boxResponse.ParseResults(converter);

            return(boxResponse.ResponseObject.AccessToken);
        }
        public virtual async Task <OAuthSession> AuthenticateBoxDeveloperEditionAsync()
        {
            string assertion = JWTConstructAssertion();

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiDeveloperEditionTokenUri)
                                    .Method(RequestMethod.Post)
                                    .Header(Constants.RequestParameters.UserAgent, _config.UserAgent)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.JWT)
                                    .Payload(Constants.RequestParameters.Assertion, assertion)
                                    .Payload(Constants.RequestParameters.ClientId, _config.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _config.ClientSecret)
                                    .Payload(Constants.RequestParameters.BoxDeviceId, _config.DeviceId)
                                    .Payload(Constants.RequestParameters.BoxDeviceName, _config.DeviceName);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(_converter);

            var session = boxResponse.ResponseObject;

            using (await _mutex.LockAsync().ConfigureAwait(false))
            {
                Session = session;

                OnSessionAuthenticated(session);
            }

            return(session);
        }
        public async Task <OAuthSession> AuthenticateAsync(string authCode)
        {
            if (string.IsNullOrWhiteSpace(authCode))
            {
                throw new ArgumentException("Auth code cannot be null or empty", "authCode");
            }

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.AuthorizationCode)
                                    .Payload(Constants.RequestParameters.Code, authCode)
                                    .Payload(Constants.RequestParameters.ClientId, _config.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _config.ClientSecret)
                                    .Payload(Constants.RequestParameters.BoxDeviceId, _config.DeviceId)
                                    .Payload(Constants.RequestParameters.BoxDeviceName, _config.DeviceName);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(_converter);

            using (await _mutex.LockAsync().ConfigureAwait(false))
            {
                Session = boxResponse.ResponseObject;

                var handler = SessionAuthenticated;
                if (handler != null)
                {
                    handler(this, new SessionAuthenticatedEventArgs(Session));
                }
            }

            return(boxResponse.ResponseObject);
        }
示例#5
0
        private OAuthSession JWTAuthPost(string assertion)
        {
            BoxRequest boxRequest = new BoxRequest(this.boxConfig.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Header(Constants.RequestParameters.UserAgent, this.boxConfig.UserAgent)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.JWTAuthorizationCode)
                                    .Payload(Constants.RequestParameters.Assertion, assertion)
                                    .Payload(Constants.RequestParameters.ClientId, this.boxConfig.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, this.boxConfig.ClientSecret);

            var converter = new BoxJsonConverter();
            IBoxResponse <OAuthSession> boxResponse = this.boxService.ToResponseAsync <OAuthSession>(boxRequest).Result;

            boxResponse.ParseResults(converter);

            return(boxResponse.ResponseObject);
        }
示例#6
0
        private async Task <OAuthSession> JWTAuthPostAsync(string assertion)
        {
            BoxRequest boxRequest = new BoxRequest(_boxConfig.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Header(Constants.RequestParameters.UserAgent, _boxConfig.UserAgent)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.JWTAuthorizationCode)
                                    .Payload(Constants.RequestParameters.Assertion, assertion)
                                    .Payload(Constants.RequestParameters.ClientId, _boxConfig.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _boxConfig.ClientSecret);

            var converter = new BoxJsonConverter();
            IBoxResponse <OAuthSession> boxResponse = await _boxService.ToResponseAsyncWithoutRetry <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(converter);

            return(boxResponse.ResponseObject);
        }
示例#7
0
        private async Task <OAuthSession> CCGAuthPostAsync(string subType, string subId)
        {
            BoxRequest boxRequest = new BoxRequest(_boxConfig.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.ClientCredentials)
                                    .Payload(Constants.RequestParameters.ClientId, _boxConfig.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _boxConfig.ClientSecret)
                                    .Payload(Constants.RequestParameters.SubjectType, subType)
                                    .Payload(Constants.RequestParameters.SubjectId, subId);

            var converter = new BoxJsonConverter();
            IBoxResponse <OAuthSession> boxResponse = await _boxService.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(converter);

            return(boxResponse.ResponseObject);
        }
示例#8
0
        private async Task <OAuthSession> ExchangeRefreshToken(string refreshToken)
        {
            if (string.IsNullOrWhiteSpace(refreshToken))
            {
                throw new ArgumentException("Refresh token cannot be null or empty", "refreshToken");
            }

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload("grant_type", "refresh_token")
                                    .Payload("refresh_token", refreshToken)
                                    .Payload("client_id", _config.ClientId)
                                    .Payload("client_secret", _config.ClientSecret);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(_converter);

            // Return new session
            return(boxResponse.ResponseObject);
        }
示例#9
0
        /// <summary>
        /// Performs the authentication request using the provided auth code
        /// </summary>
        /// <param name="authCode"></param>
        /// <returns></returns>
        protected async Task <OAuthSession> ExchangeAuthCode(string authCode)
        {
            if (string.IsNullOrWhiteSpace(authCode))
            {
                throw new ArgumentException("Auth code cannot be null or empty", "authCode");
            }

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload(Constants.RequestParameters.GrantType, Constants.RequestParameters.AuthorizationCode)
                                    .Payload(Constants.RequestParameters.Code, authCode)
                                    .Payload(Constants.RequestParameters.ClientId, _config.ClientId)
                                    .Payload(Constants.RequestParameters.ClientSecret, _config.ClientSecret)
                                    .Payload(Constants.RequestParameters.BoxDeviceId, _config.DeviceId)
                                    .Payload(Constants.RequestParameters.BoxDeviceName, _config.DeviceName);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(_converter);

            return(boxResponse.ResponseObject);
        }
示例#10
0
        public async Task <OAuthSession> AuthenticateAsync(string authCode)
        {
            if (string.IsNullOrWhiteSpace(authCode))
            {
                throw new ArgumentException("Auth code cannot be null or empty", "authCode");
            }

            BoxRequest boxRequest = new BoxRequest(_config.BoxApiHostUri, Constants.AuthTokenEndpointString)
                                    .Method(RequestMethod.Post)
                                    .Payload("grant_type", "authorization_code")
                                    .Payload("code", authCode)
                                    .Payload("client_id", _config.ClientId)
                                    .Payload("client_secret", _config.ClientSecret);

            IBoxResponse <OAuthSession> boxResponse = await _service.ToResponseAsync <OAuthSession>(boxRequest).ConfigureAwait(false);

            boxResponse.ParseResults(_converter);

            using (await _mutex.LockAsync().ConfigureAwait(false))
                Session = boxResponse.ResponseObject;

            return(boxResponse.ResponseObject);
        }