Beispiel #1
0
    private WebConsumer CreateConsumer()
    {
        string consumerKey    = "sampleconsumer";
        string consumerSecret = "samplesecret";
        var    tokenManager   = Session["WcfTokenManager"] as InMemoryTokenManager;

        if (tokenManager == null)
        {
            tokenManager = new InMemoryTokenManager(consumerKey, consumerSecret);
            Session["WcfTokenManager"] = tokenManager;
        }
        MessageReceivingEndpoint oauthEndpoint = new MessageReceivingEndpoint(
            new Uri("http://localhost:65169/OAuthServiceProvider/OAuth.ashx"),
            HttpDeliveryMethods.PostRequest);
        WebConsumer consumer = new WebConsumer(
            new ServiceProviderDescription {
            RequestTokenEndpoint      = oauthEndpoint,
            UserAuthorizationEndpoint = oauthEndpoint,
            AccessTokenEndpoint       = oauthEndpoint,
            TamperProtectionElements  = new DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement[] {
                new HmacSha1SigningBindingElement(),
            },
        },
            tokenManager);

        return(consumer);
    }
Beispiel #2
0
        /// <summary>
        /// Starts the simulation.
        /// </summary>
        internal override void Run()
        {
            // Clone the template signing binding element.
            var signingElement         = this.serviceDescription.CreateTamperProtectionElement();
            var consumerSigningElement = signingElement.Clone();
            var spSigningElement       = signingElement.Clone();

            // Prepare token managers
            InMemoryTokenManager consumerTokenManager = new InMemoryTokenManager();
            InMemoryTokenManager serviceTokenManager  = new InMemoryTokenManager();

            consumerTokenManager.AddConsumer(this.consumerDescription);
            serviceTokenManager.AddConsumer(this.consumerDescription);

            // Prepare channels that will pass messages directly back and forth.
            CoordinatingOAuthChannel consumerChannel        = new CoordinatingOAuthChannel(consumerSigningElement, (IConsumerTokenManager)consumerTokenManager);
            CoordinatingOAuthChannel serviceProviderChannel = new CoordinatingOAuthChannel(spSigningElement, (IServiceProviderTokenManager)serviceTokenManager);

            consumerChannel.RemoteChannel        = serviceProviderChannel;
            serviceProviderChannel.RemoteChannel = consumerChannel;

            // Prepare the Consumer and Service Provider objects
            WebConsumer consumer = new WebConsumer(this.serviceDescription, consumerTokenManager)
            {
                OAuthChannel = consumerChannel,
            };
            ServiceProvider serviceProvider = new ServiceProvider(this.serviceDescription, serviceTokenManager, new NonceMemoryStore())
            {
                OAuthChannel = serviceProviderChannel,
            };

            this.RunCore(consumer, serviceProvider);
        }
Beispiel #3
0
            public Investigator()
            {
                logger = LogManager.GetLogger(typeof(Investigator));
                InMemoryTokenManager tokenManager = new InMemoryTokenManager(Constants.TwitterConsumerKey, Constants.TwitterConsumerSecret);

                tokenManager.StoreAccessToken(Constants.TwitterAccessToken, Constants.TwitterAccessSecret);
                consumer = new WebConsumer(UserModule.ServiceDescription, tokenManager);
            }
Beispiel #4
0
        public static InMemoryTokenManager GetTokenManager(string consumerKey, string consumerSecret)
        {
            if (tokenManager == null)
            {
                tokenManager = new InMemoryTokenManager(consumerKey, consumerSecret);
            }

            return(tokenManager);
        }
        public async Task <ActionResult> LinkedIn(int?job)
        {
            var mandator = await GetMandator();

            var tokenManager     = new InMemoryTokenManager(mandator.PortalSettings.LinkedinConsumerKey, mandator.PortalSettings.LinkedinConsumerSecret);
            var linkedinConsumer = new LinkedinConsumer(tokenManager);

            return(await Link(linkedinConsumer, ThirdParty.LinkedIn, job));
        }
        public async Task <ActionResult> Xing(int?job)
        {
            var mandator = await GetMandator();

            var tokenManager = new InMemoryTokenManager(mandator.PortalSettings.XingConsumerKey, mandator.PortalSettings.XingConsumerSecret);
            var xingConsumer = new XingConsumer(tokenManager);

            return(await Link(xingConsumer, ThirdParty.Xing, job));
        }
    protected void authorizeButton_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid) {
            return;
        }

        InMemoryTokenManager tokenManager = new InMemoryTokenManager(consumerKeyBox.Text, consumerSecretBox.Text);
        Session["TokenManager"] = tokenManager;
        var google = GoogleConsumer.CreateWebConsumer(tokenManager, consumerKeyBox.Text);
        GoogleConsumer.RequestAuthorization(google, GoogleConsumer.Applications.Contacts);
    }
Beispiel #8
0
     protected void Page_Load(object sender, EventArgs e)
     {
 // This is what the NetSuite SuiteSignOn ConnectionPoint sends:
 // GET /administratorportal/SSO/sso_page.aspx?oauth_token=08046c1c166a7a6c47471857502d364b0d59415418156f15db22f76dcfe648&dc=001&env=SANDBOX
 // see the NetSuite SuiteSignOn doc about dc & env processing to build endpoints
 ServiceProviderDescription provider = GetServiceDescription();
 
 // Set up OAuth with our keys and stuff
 string token = Request.Params["oauth_token"];
 string consumerKey = "yourconsumerkey";    // this has to match what is defined on our NetSuite account - ConnectionPoint to CRMLink
 string sharedSecret = "yoursharedsecret";        // this has to match what is defined on our NetSuite account - ConnectionPoint to CRMLink - Careful - NO funny chars like '!'
 
 // I got this InMemoryTokenManager from another DotNetOpenAuth post in SO
 InMemoryTokenManager _tokenManager = new InMemoryTokenManager(consumerKey, sharedSecret);
 AuthorizationApprovedResponse authApprovedResponse = new AuthorizationApprovedResponse();
 authApprovedResponse.RequestToken = token;
 
 _tokenManager.StoreOpenIdAuthorizedRequestToken(consumerKey, authApprovedResponse);
 
 WebConsumer consumer = new WebConsumer(provider, _tokenManager);
 
 // this is the SSO address in netsuite to use.  Should be production or sandbox, based on the values of dc and env
 string uri = "https://system.sandbox.netsuite.com/app/common/integration/ssoapplistener.nl";
                 MessageReceivingEndpoint endpoint = new MessageReceivingEndpoint(uri, methods);
 
 WebRequest verifyRequest = consumer.PrepareAuthorizedRequest(endpoint, token );
 HttpWebResponse responseData = verifyRequest.GetResponse() as HttpWebResponse;
 
 XDocument responseXml;
 responseXml = XDocument.Load(responseData.GetResponseStream());
 
 // process the SSO values that come back from NetSuite in the XML  They should look something
 // like the following:
 /* XML response should look like this:
 
 <?xml version="1.0" encoding="UTF-8"?>
 <outboundSso>
     <entityInfo>
          <ENTITYINTERNALID>987654</ENTITYINTERNALID>
          <ENTITYNAME>Fred</ENTITYNAME>
          <ENTITYEMAIL>[email protected]</ENTITYEMAIL>
     </entityInfo>
 </outboundSso>
 */
 
 // If that data looks good, you can mark the user as logged in, and redirect to whatever
 // page (like SSOLandingPage.aspx) you want, which will be shown inside a frame on the NetSuite page.
 
 Response.Redirect("~/SSOLandingPage.aspx", false);
        /// <summary>
        /// Creates a 23 API service repository, that doesn't require further authentication. Account must be "privileged"
        /// </summary>
        /// <param name="consumerDomain">Domain name</param>
        /// <param name="consumerKey">Consumer key</param>
        /// <param name="consumerSecret">Consumer secret</param>
        /// <param name="accessToken">Access token</param>
        /// <param name="accessTokenSecret">Access token secret</param>
        public ApiProvider(string consumerDomain, string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, bool httpSecure)
        {
            // Save the authentication keys
            _consumerDomain = consumerDomain;

            _consumerKey    = consumerKey;
            _consumerSecret = consumerSecret;

            _httpSecure = httpSecure;

            string protocol = httpSecure ? "https://" : "http://";

            // Adjust timeout for requests to the domain to allow for large file uploads
            WebRequest.RegisterPrefix(protocol + _consumerDomain, TwentyThreeCreatorRequestCreator.TwentyThreeHttp);

            // Open the OAuth consumer connection
            _oAuthProviderDescription.AccessTokenEndpoint       = new MessageReceivingEndpoint(protocol + "api.visualplatform.net/oauth/access_token", HttpDeliveryMethods.GetRequest);
            _oAuthProviderDescription.RequestTokenEndpoint      = new MessageReceivingEndpoint(protocol + "api.visualplatform.net/oauth/request_token", HttpDeliveryMethods.GetRequest);
            _oAuthProviderDescription.ProtocolVersion           = ProtocolVersion.V10a;
            _oAuthProviderDescription.UserAuthorizationEndpoint = new MessageReceivingEndpoint(protocol + "api.visualplatform.net/oauth/authorize", HttpDeliveryMethods.GetRequest);
            _oAuthProviderDescription.TamperProtectionElements  = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() };

            _oAuthTokenManager = new InMemoryTokenManager(_consumerKey, _consumerSecret);

            _oAuthConsumer = new WebConsumer(_oAuthProviderDescription, _oAuthTokenManager);

            if (accessToken != null)
            {
                _accessToken       = accessToken;
                _accessTokenSecret = accessTokenSecret;

                _oAuthTokenManager.ExpireRequestTokenAndStoreNewAccessToken(_consumerKey, "", _accessToken, _accessTokenSecret);
            }

            _oAuthConsumer.Channel.AssertBoundary();
        }
        public ActionResult Authenticate(AuthRequestType authType)
        {
            Guard.MakeSureAllInstancesIsNullNot(_mySettings);

            var redirectUrl = string.Empty;

            switch (authType)
            {
            case AuthRequestType.Facebook:
                var facebookContext    = new FacebookAuthRequestProcessingContext();
                var facebookInputParam = new FacebookAuthRequestProcessingParameter
                {
                    RequestUrl   = HttpContext.Request.GetUrlBase(),
                    RedirectPath = Url.Action("FacebookCallbackAction")
                };

                facebookContext.Execute(() => facebookInputParam);

                redirectUrl = facebookContext.ReturnResult;
                break;

            case AuthRequestType.Twitter:

                var twitterContext = new TwitterAuthRequestProcessingContext();

                var twitterCallbackUrl = Request.Url.ToString().Replace("Authenticate", "TwitterCallbackAction");
                var twitterCallback    = new Uri(twitterCallbackUrl);

                _consumerKey = _mySettings.TwitterConsumerKey;
                _secretKey   = _mySettings.TwitterConsumerSecret;

                AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                var twitterInputParam = new TwitterAuthRequestProcessingParameter
                {
                    CallBackLink = twitterCallback,
                    TokenManager = _tokenManager
                };

                twitterContext.Execute(() => twitterInputParam);

                HttpContext.Application["TwitterTokenManager"] = _tokenManager;

                return(twitterContext.ReturnResult);

                break;

            case AuthRequestType.Google:
                var googleContext = new GoogleAuthRequestProcessingContext();

                var callbackUrl = Request.Url.ToString().Replace("Authenticate", "GoogleCallbackAction");
                var callback    = new Uri(callbackUrl);

                _consumerKey = _mySettings.GoogleConsumerKey;
                _secretKey   = _mySettings.GoogleConsumerSecret;

                AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                var googleInputParam = new GoogleAuthRequestProcessingParameter
                {
                    CallBackLink = callback,
                    TokenManager = _tokenManager
                };

                googleContext.Execute(() => googleInputParam);

                HttpContext.Application["GoogleTokenManager"] = _tokenManager;

                return(googleContext.ReturnResult);

                break;
            }

            return(Redirect(redirectUrl));
        }
Beispiel #11
0
        public async Task SpecAppendixAExample()
        {
            var serviceDescription = new ServiceProviderDescription(
                "https://photos.example.net/request_token",
                "http://photos.example.net/authorize",
                "https://photos.example.net/access_token");
            var serviceHostDescription = new ServiceProviderHostDescription {
                RequestTokenEndpoint      = new MessageReceivingEndpoint(serviceDescription.TemporaryCredentialsRequestEndpoint, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
                UserAuthorizationEndpoint = new MessageReceivingEndpoint(serviceDescription.ResourceOwnerAuthorizationEndpoint, HttpDeliveryMethods.GetRequest),
                AccessTokenEndpoint       = new MessageReceivingEndpoint(serviceDescription.TokenRequestEndpoint, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
                TamperProtectionElements  = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement(), },
            };
            var accessPhotoEndpoint = new Uri("http://photos.example.net/photos?file=vacation.jpg&size=original");
            var consumerDescription = new ConsumerDescription("dpf43f3p2l4k3l03", "kd94hf93k423kf44");

            var tokenManager = new InMemoryTokenManager();

            tokenManager.AddConsumer(consumerDescription);
            var sp = new ServiceProvider(serviceHostDescription, tokenManager);

            Handle(serviceDescription.TemporaryCredentialsRequestEndpoint).By(
                async(request, ct) => {
                var requestTokenMessage = await sp.ReadTokenRequestAsync(request, ct);
                return(await sp.Channel.PrepareResponseAsync(sp.PrepareUnauthorizedTokenMessage(requestTokenMessage)));
            });
            Handle(serviceDescription.ResourceOwnerAuthorizationEndpoint).By(
                async(request, ct) => {
                var authRequest = await sp.ReadAuthorizationRequestAsync(request, ct);
                ((InMemoryTokenManager)sp.TokenManager).AuthorizeRequestToken(authRequest.RequestToken);
                return(await sp.Channel.PrepareResponseAsync(sp.PrepareAuthorizationResponse(authRequest)));
            });
            Handle(serviceDescription.TokenRequestEndpoint).By(
                async(request, ct) => {
                var accessRequest = await sp.ReadAccessTokenRequestAsync(request, ct);
                return(await sp.Channel.PrepareResponseAsync(sp.PrepareAccessTokenMessage(accessRequest), ct));
            });
            Handle(accessPhotoEndpoint).By(
                async(request, ct) => {
                string accessToken = (await sp.ReadProtectedResourceAuthorizationAsync(request)).AccessToken;
                Assert.That(accessToken, Is.Not.Null.And.Not.Empty);
                var responseMessage = new HttpResponseMessage {
                    Content = new ByteArrayContent(new byte[] { 0x33, 0x66 }),
                };
                responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
                return(responseMessage);
            });

            var consumer = new Consumer(
                consumerDescription.ConsumerKey,
                consumerDescription.ConsumerSecret,
                serviceDescription,
                new MemoryTemporaryCredentialStorage());

            consumer.HostFactories = this.HostFactories;
            var authorizeUrl = await consumer.RequestUserAuthorizationAsync(new Uri("http://printer.example.com/request_token_ready"));

            Uri authorizeResponseUri;

            this.HostFactories.AllowAutoRedirects = false;
            using (var httpClient = this.HostFactories.CreateHttpClient()) {
                using (var response = await httpClient.GetAsync(authorizeUrl)) {
                    Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Redirect));
                    authorizeResponseUri = response.Headers.Location;
                }
            }

            var accessTokenResponse = await consumer.ProcessUserAuthorizationAsync(authorizeResponseUri);

            Assert.That(accessTokenResponse, Is.Not.Null);

            using (var authorizingClient = consumer.CreateHttpClient(accessTokenResponse.AccessToken)) {
                using (var protectedPhoto = await authorizingClient.GetAsync(accessPhotoEndpoint)) {
                    Assert.That(protectedPhoto, Is.Not.Null);
                    protectedPhoto.EnsureSuccessStatusCode();
                    Assert.That("image/jpeg", Is.EqualTo(protectedPhoto.Content.Headers.ContentType.MediaType));
                    Assert.That(protectedPhoto.Content.Headers.ContentLength, Is.Not.EqualTo(0));
                }
            }
        }
Beispiel #12
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            // Reset the GUI
            lblStatusCode.Text = string.Empty;
            txtResults.Text    = string.Empty;
            txtBuiltUrl.Text   = string.Empty;

            // Get the request method
            RequestMethod selectedMethod = GetRequestMethod();

            // Create parameter list
            var paramList = CreateParameterList();

            ExtApiCallResult result = null;
            var apiRunner           = new ApiRunner();

            if (chkIncludeOAuth.Checked)
            {
                // Create the token manager
                var tokenManager = new InMemoryTokenManager();
                tokenManager.ConsumerKey    = txtConsumerKey.Text;
                tokenManager.ConsumerSecret = txtConsumerSecret.Text;
                tokenManager.AddKeyAndSecret(txtAccessToken.Text, txtTokenSecret.Text);

                // Call the api
                try
                {
                    result = apiRunner.ExecuteOAuthApiCall(txtApiUrl.Text, paramList, GetRequestMethod(), txtConsumerKey.Text,
                                                           txtConsumerSecret.Text, txtAccessToken.Text, txtTokenSecret.Text);
                }
                catch (UriFormatException ex)
                {
                    HandleApiCallException(ex);
                    return;
                }
            }

            else
            {
                string username = chkUseWebAuth.Checked ? txtWebAuthUsername.Text : string.Empty;
                string password = chkUseWebAuth.Checked ? txtWebAuthPassword.Text : string.Empty;

                try { result = apiRunner.ExecuteApiCall(txtApiUrl.Text, paramList, selectedMethod, username, password); }
                catch (UriFormatException ex)
                {
                    HandleApiCallException(ex);
                    return;
                }
            }

            // Show the results
            lblStatusCode.Text = result.StatusCode.ToString();
            txtBuiltUrl.Text   = result.FinalUrl;

            if (result.XmlResponse != null)
            {
                txtResults.Text = result.XmlResponse.ToString();
            }

            else
            {
                // Check if it's json, if so pretty print it
                var response = new StreamReader(result.ResponseStream).ReadToEnd();

                if (response.Length > 0 && (response[0] == '{' || response[0] == '['))
                {
                    txtResults.Text = JsonFormatter.PrettyPrint(response);
                }
                else
                {
                    txtResults.Text = response;
                }
            }

            // Make sure we don't leak the stream
            result.ResponseStream.Dispose();
        }
Beispiel #13
0
        public GoogleUserInformation AuthRequestProcessed(InMemoryTokenManager inMemoryTokenManager)
        {
            _googleAuthRequestRole.GoogleAuthRequestProcessed(inMemoryTokenManager);

            return(_googleAuthRequestRole as GoogleUserInformation);
        }