Пример #1
0
        static void Main(string[] args)
        {
            Uri requestTokenEndPoint = new Uri(REQUEST_TOKEN_END_POINT);
            Uri authorizeEndPoint    = new Uri(AUTHORIZE_END_POINT);
            Uri accessTokenEndPoint  = new Uri(ACCESS_TOKEN_END_POINT);

            ClientCredentials credentials = new ClientCredentials(CLIENT_IDENTIFIER, CLIENT_SHARED_SECRET);

            try
            {
                NegotiationTokenRequest negotiationTokenRequest = NegotiationTokenRequest.Create(requestTokenEndPoint, credentials);
                NegotiationToken        negotiationToken        = negotiationTokenRequest.GetToken();

                Console.WriteLine("Negotiation Token: " + negotiationToken.Value);
                Console.WriteLine("Negotiation Token Secret: " + negotiationToken.Secret);

                Uri authorizationUri = AuthorizationUri.Create(authorizeEndPoint, negotiationToken);

                Console.WriteLine(authorizationUri);
                Console.ReadLine(); // Wait for user authorization.

                AccessTokenRequest accessTokenRequest = AccessTokenRequest.Create(accessTokenEndPoint, credentials, negotiationToken);
                AccessToken        accessToken        = accessTokenRequest.GetToken();

                Console.WriteLine("Access Token: " + accessToken.Value);
                Console.WriteLine("Access Token Secret: " + accessToken.Secret);
            }
            catch (WebException ex)
            {
                Console.WriteLine(new StreamReader(ex.Response.GetResponseStream()).ReadToEnd());
                Environment.Exit(0);
            }
        }
Пример #2
0
 /// <summary>
 /// Builds the full Uri for starting the authorization process on the server.
 /// </summary>
 /// <param name="args">Authorization operation arguments.</param>
 /// <returns>Uri to use as the initial Uri where the embedded browser is opened.</returns>
 protected override Uri BuildAuthorizationUri(AuthorizationCodeGrantArgs args)
 {
     return(AuthorizationUri.BuildAuthorizationUri(OAuthConfig, GetResponseType(), args));
 }
 /// <summary>
 /// Builds the full Uri for starting the authorization process on the server.
 /// </summary>
 /// <param name="args">Authorization operation arguments.</param>
 /// <returns>Uri to use as the initial Uri where the embedded browser is opened.</returns>
 protected virtual Uri BuildAuthorizationUri(A args)
 {
     return(AuthorizationUri.BuildAuthorizationUri(OAuthConfig, GetResponseType(), args));
 }
        /// <summary>
        /// Starts the authorization process.
        /// </summary>
        /// <param name="args">Authorization operation arguments.</param>
        /// <param name="cancellationToken">Cancellation token for cancelling the operation.</param>
        /// <returns>Returns OAuth state as received back from the server, or <c>null</c> if OAuth state
        /// is not used with the authorization flow, or if no OAuth state specified in the <paramref name="args"/>.</returns>
        public async Task <string> Authorize(AuthorizationCodeGrantArgs args, CancellationToken?cancellationToken)
        {
            OnStarted();

            HttpListener httpListener;
            int          port;
            string       redirectUri;
            var          result = TryBindListenerOnFreePort(out httpListener, out port, out redirectUri);

            if (!result)
            {
                throw new InvalidOperationException(
                          "Opening port for listening to authentication response failed. " +
                          "Please check settings of your security software and ensure that this " +
                          "application is allowed to open an HTTP listener in a free port between 49215 - 65535.");
            }

            try
            {
                var configWithDynamicRedirectUri = new AuthorizationCodeGrantConfigWithDynamicRedirectUri(OAuthConfig, redirectUri);
                var authzUri = AuthorizationUri.BuildAuthorizationUri(configWithDynamicRedirectUri, GetResponseType(), args);

                OnBeforeAuthorization(args, authzUri);

                // Open URL in the OS default browser
                var cmd = authzUri.ToString();
                Process.Start(new ProcessStartInfo(cmd)
                {
                    UseShellExecute = true
                });

                // Wait for the response (request sent to the redirectUri)
                var timeoutSeconds      = GetResponseTimeout();
                var waitForResponseTask = httpListener.GetContextAsync();
                var timeoutTask         = cancellationToken == null
                        ? Task.Delay(timeoutSeconds * 1000)
                        : Task.Delay(timeoutSeconds * 1000, cancellationToken.Value);

                if (await Task.WhenAny(waitForResponseTask, timeoutTask).ConfigureAwait(false) == waitForResponseTask)
                {
                    await waitForResponseTask;
                }
                else
                {
                    OnCancelled(args, authzUri);
                    return(null);
                }

                var context        = waitForResponseTask.Result;
                var responseParams = ParseResponseParameters(context.Request.Url);
                OnAfterAuthorization(args, authzUri, responseParams);

                SendAuthorizationCompletedResponse(args, authzUri, responseParams, context);

                return(ReadAuthorizationResponse(configWithDynamicRedirectUri, args, responseParams));
            }
            finally
            {
                httpListener.Close();
            }
        }