Exemple #1
0
        protected override async Task <AuthenticationResult> VerifyAuthenticationCoreAsync(AccessTokenResponse response, CancellationToken cancellationToken)
        {
            string userId   = response.ExtraData["user_id"];
            string userName = response.ExtraData["screen_name"];

            var profileRequestUrl = new Uri("https://api.twitter.com/1/users/show.xml?user_id="
                                            + MessagingUtilities.EscapeUriDataStringRfc3986(userId));
            var authorizingHandler = this.WebWorker.CreateMessageHandler(response.AccessToken);

            var extraData = new NameValueCollection();

            extraData.Add("accesstoken", response.AccessToken.Token);
            extraData.Add("accesstokensecret", response.AccessToken.Secret);
            try {
                using (var httpClient = new HttpClient(authorizingHandler)) {
                    using (HttpResponseMessage profileResponse = await httpClient.GetAsync(profileRequestUrl, cancellationToken)) {
                        using (Stream responseStream = await profileResponse.Content.ReadAsStreamAsync()) {
                            XDocument document = LoadXDocumentFromStream(responseStream);
                            extraData.AddDataIfNotEmpty(document, "name");
                            extraData.AddDataIfNotEmpty(document, "location");
                            extraData.AddDataIfNotEmpty(document, "description");
                            extraData.AddDataIfNotEmpty(document, "url");
                        }
                    }
                }
            }
            catch (Exception) {
                // At this point, the authentication is already successful.
                // Here we are just trying to get additional data if we can.
                // If it fails, no problem.
            }

            return(new AuthenticationResult(
                       isSuccessful: true, provider: this.ProviderName, providerUserId: userId, userName: userName, extraData: extraData));
        }
Exemple #2
0
        protected override async Task <AuthenticationResult> VerifyAuthenticationCoreAsync(AccessTokenResponse response, CancellationToken cancellationToken = default(CancellationToken))
        {
            // See here for Field Selectors API http://developer.linkedin.com/docs/DOC-1014
            const string ProfileRequestUrl = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline,industry,summary)";

            var accessToken        = response.AccessToken;
            var authorizingHandler = this.WebWorker.CreateMessageHandler(accessToken);

            try {
                using (var httpClient = new HttpClient(authorizingHandler)) {
                    using (HttpResponseMessage profileResponse = await httpClient.GetAsync(ProfileRequestUrl, cancellationToken)) {
                        using (Stream responseStream = await profileResponse.Content.ReadAsStreamAsync()) {
                            XDocument document = LoadXDocumentFromStream(responseStream);
                            string    userId   = document.Root.Element("id").Value;

                            string firstName = document.Root.Element("first-name").Value;
                            string lastName  = document.Root.Element("last-name").Value;
                            string userName  = firstName + " " + lastName;

                            var extraData = new NameValueCollection();
                            extraData.Add("accesstoken", accessToken.Token);
                            extraData.Add("accesstokensecret", accessToken.Secret);
                            extraData.Add("name", userName);
                            extraData.AddDataIfNotEmpty(document, "headline");
                            extraData.AddDataIfNotEmpty(document, "summary");
                            extraData.AddDataIfNotEmpty(document, "industry");

                            return(new AuthenticationResult(
                                       isSuccessful: true,
                                       provider: this.ProviderName,
                                       providerUserId: userId,
                                       userName: userName,
                                       extraData: extraData));
                        }
                    }
                }
            } catch (Exception exception) {
                return(new AuthenticationResult(exception));
            }
        }