Exemplo n.º 1
0
        protected virtual async Task <OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier)
        {
            var postData = await authenticator.GetTokenPostData(ClientSecret);

            var reply = await Client.PostAsync("oauth2/token", new FormUrlEncodedContent(postData));

            var resp = await reply.Content.ReadAsStringAsync();

            var result = Deserialize <OauthResponse>(resp);

            if (!string.IsNullOrEmpty(result.Error))
            {
                throw new Exception(result.ErrorDescription);
            }

            var account = new OAuthAccount()
            {
                ExpiresIn    = result.ExpiresIn,
                Created      = DateTime.UtcNow,
                RefreshToken = authenticator.AuthCode,
                Scope        = authenticator.Scope.ToArray(),
                TokenType    = result.TokenType,
                Token        = result.AccessToken,
                ClientId     = ClientId,
                Identifier   = identifier,
            };

            return(account);
        }
        //Thanks you facebook for making your token exchange a get...
        protected override async Task <OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier)
        {
            var           auth = authenticator as FacebookAuthenticator;
            OauthResponse result;

            if (IsUsingNative)
            {
                result = new OauthResponse
                {
                    ExpiresIn    = auth.Expiration,
                    TokenType    = "Bearer",
                    AccessToken  = auth.AuthCode,
                    RefreshToken = auth.AuthCode,
                };
            }
            else
            {
                var postData = await authenticator.GetTokenPostData(ClientSecret);

                if (string.IsNullOrWhiteSpace(TokenUrl))
                {
                    throw new Exception("Invalid TokenURL");
                }

                var url   = new Uri(TokenUrl).AddParameters(postData);
                var reply = await Client.GetAsync(url);

                var resp = await reply.Content.ReadAsStringAsync();

                result = Deserialize <OauthResponse>(resp);
                if (!string.IsNullOrEmpty(result.Error))
                {
                    throw new Exception($"{result.Error} : {result.ErrorDescription}");
                }
            }

            var account = new OAuthAccount()
            {
                ExpiresIn    = result.ExpiresIn,
                Created      = DateTime.UtcNow,
                RefreshToken = result.RefreshToken,
                Scope        = authenticator.Scope?.ToArray(),
                TokenType    = result.TokenType,
                Token        = result.AccessToken,
                ClientId     = ClientId,
                Identifier   = identifier,
                IdToken      = result.Id,
            };

            return(account);
        }
Exemplo n.º 3
0
		//Thanks you facebook for making your token exchange a get...
		protected override async Task<OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier)
		{
			var auth = authenticator as FacebookAuthenticator;
			OauthResponse result;
			if (IsUsingNative)
			{
				result = new OauthResponse
				{
					ExpiresIn = auth.Expiration,
					TokenType = "Bearer",
					AccessToken = auth.AuthCode,
					RefreshToken = auth.AuthCode,
				};
			}
			else {
				var postData = await authenticator.GetTokenPostData(ClientSecret);
				if (string.IsNullOrWhiteSpace(TokenUrl))
					throw new Exception("Invalid TokenURL");
				var url = new Uri(TokenUrl).AddParameters(postData);
				var reply = await Client.GetAsync(url);
				var resp = await reply.Content.ReadAsStringAsync();
				result = Deserialize<OauthResponse>(resp);
				if (!string.IsNullOrEmpty(result.Error))
					throw new Exception(result.ErrorDescription);
			}

			var account = new OAuthAccount()
			{
				ExpiresIn = result.ExpiresIn,
				Created = DateTime.UtcNow,
				RefreshToken = result.RefreshToken,
				Scope = authenticator.Scope?.ToArray(),
				TokenType = result.TokenType,
				Token = result.AccessToken,
				ClientId = ClientId,
				Identifier = identifier,
			};
			return account;
		}