コード例 #1
0
        /// <summary>
        /// Authorisation Code - Authorisation Code Flow
        /// </summary>
        /// <param name="clientId">Client Id</param>
        /// <param name="clientSecret">Client Secret</param>
        /// <param name="accessCode">Access Code</param>
        /// <param name="cancellationToken">Cancellation Token</param>
        /// <returns>Authentication Response</returns>
        public Task <AuthenticationResponse> AuthorisationCodeAsync(
            string clientId,
            string clientSecret,
            AccessCode accessCode,
            CancellationToken cancellationToken)
        {
            var headers = GetHeaders(clientId, clientSecret);
            var request = new Dictionary <string, string>()
            {
                { grant_type, authorization_code },
                { code_value, accessCode.Code },
                { redirect_uri, accessCode.RedirectUri.ToString() }
            };

            return(PostRequestAsync <Dictionary <string, string>, AuthenticationResponse>(host_name,
                                                                                          token_uri, null, cancellationToken, request, null, headers, true));
        }
コード例 #2
0
        /// <summary>
        /// Get Authorisation Code Token - Authorisation Code Flow
        /// </summary>
        /// <param name="accessCode">Access Code</param>
        /// <param name="cancellationToken">Cancellation Token</param>
        /// <returns>Access Token</returns>
        public async Task <AccessToken> GetAuthorisationCodeTokenAsync(
            AccessCode accessCode,
            CancellationToken cancellationToken)
        {
            var authenticationResponse =
                await _client.AuthorisationCodeAsync(
                    _clientId,
                    _clientSecret,
                    accessCode,
                    cancellationToken);

            if (authenticationResponse != null)
            {
                AccessToken = Map(TokenType.User,
                                  authenticationResponse);
            }
            return(AccessToken);
        }
コード例 #3
0
 /// <summary>
 /// Get Access Code Auth - Authorisation Code Flow
 /// </summary>
 /// <param name="responseUri">Response Uri</param>
 /// <param name="redirectUri">Redirect Uri</param>
 /// <param name="state">State Value</param>
 /// <returns>Access Token</returns>
 /// <exception cref="AuthCodeValueException">AuthCodeValueException</exception>
 /// <exception cref="AuthCodeStateException">AuthCodeStateException</exception>
 public async Task <AccessToken> GetAccessCodeAuthAsync(
     Uri responseUri,
     Uri redirectUri,
     string state)
 {
     if (responseUri != null)
     {
         if (responseUri.ToString().Contains(redirectUri.ToString()))
         {
             if (_accessCode == null || _accessCode.ResponseUri != responseUri)
             {
                 _accessCode = new AccessCode(
                     responseUri, redirectUri,
                     responseUri.Query.QueryStringAsDictionary());
                 if (state == null || _accessCode.State == state)
                 {
                     if (string.IsNullOrEmpty(_accessCode.Code))
                     {
                         throw new AuthCodeValueException();
                     }
                     else
                     {
                         return(await GetAuthorisationCodeTokenAsync(
                                    _accessCode,
                                    new CancellationToken(false)));
                     }
                 }
                 else
                 {
                     throw new AuthCodeStateException();
                 }
             }
         }
     }
     return(null);
 }