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); } }
/// <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(); } }