Beispiel #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);
		}
Beispiel #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);
			}
		}