示例#1
0
        public async Task<IActionResult> IssueToken([FromBody] BearerTokenRequest model)
        {
            if (!ValidModelState(out var error))
                return error;

            TUser user;
            switch (model.IdentityType)
            {
                case IdentityType.Username:
                    user = await _userManager.FindByNameAsync(model.Identity);
                    break;
                case IdentityType.Email:
                    user = await _userManager.FindByEmailAsync(model.Identity);
                    if (!user.EmailConfirmed)
                        return NotFound();
                    break;
                case IdentityType.PhoneNumber:
                    user = await _userManager.FindByPhoneNumberAsync(model.Identity);
                    if (!user.PhoneNumberConfirmed)
                        return NotFound();
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            if (user == null)
                return NotFound();

            if (user.LockoutEnd.HasValue && user.LockoutEnd > _timestamps.GetCurrentTime())
                return Forbid();

            if (await _userManager.CheckPasswordAsync(user, model.Password))
            {
                Debug.Assert(nameof(IUserIdProvider.Id) == nameof(IdentityUser.Id));

                var claims = await _userManager.GetClaimsAsync(user);

                if (HttpContext.GetTenantContext<TTenant>() is TenantContext<TTenant> tenantContext)
                {
                    if (tenantContext.Tenant != null)
                    {
                        claims.Add(new Claim(_securityOptions.Value.Claims.TenantIdClaim, tenantContext.Tenant.Id));
                        claims.Add(new Claim(_securityOptions.Value.Claims.TenantNameClaim, tenantContext.Tenant.Name));
                    }
                }

                var provider = user.ActLike<IUserIdProvider>();
                var token = JwtSecurity.CreateToken(provider, claims, _securityOptions.Value, _apiOptions.Value);

                return Ok(new
                {
                    AccessToken = token
                });
            }

            return Unauthorized();
        }
        /// <summary>
        /// GetBearerToken will swap the provided accessCode and clientSecretKey for a bearer token.
        /// The bearer token is essentially the session id for the caller on behalf of the user who
        /// produced this access code.
        /// </summary>
        /// <param name="client">DigivanceClient</param>
        /// <param name="accessCode">The access_code returned from Digivance auth process</param>
        /// <param name="clientSecretKey">Your product's clientSecretKey</param>
        /// <returns>The bearer token that can be used to call functions on behalf of this user</returns>
        public async static Task <string> GetBearerToken(this DigivanceClient client, string accessCode, string clientSecretKey)
        {
            BearerTokenRequest bearerTokenRequest = new BearerTokenRequest {
                AccessCode      = accessCode,
                ClientSecretKey = clientSecretKey
            };

            HttpResponseMessage response = await client.PostAsJsonAsync($"{client.BaseAddress}/auth/bearertoken", bearerTokenRequest);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                string payload = await response.Content.ReadAsStringAsync();

                ErrorResponse res = JsonConvert.DeserializeObject <ErrorResponse>(payload);

                throw new Exception(res.Message);
            }

            client.BearerToken = client.GetCookie("BearerToken");
            return(client.BearerToken);
        }
示例#3
0
        public static void Main(string[] args)
        {
            Uri tokenUri = new Uri("https://api.twitter.com/oauth2/token");
            Uri userTimelineUri = new Uri("https://api.twitter.com/1.1/statuses/user_timeline.json");

            var twitter = new Twitter();

            var credential = new BearerTokenCredential(ConsumerKey, ConsumerSecret);
            var tokenRequest = new BearerTokenRequest(credential, tokenUri);

            IBearerToken token= twitter.RequestBearerToken(tokenRequest);

            Console.WriteLine(token);

            string screenName = "JohnRentoul";
            var tweetsRequest = new TweetRequest(token, userTimelineUri, screenName);

            var tweets = twitter.GetTweets(tweetsRequest);

            Console.WriteLine();
            Console.WriteLine("--------");
            Console.WriteLine();

            List<SyndicationItem> items = new List<SyndicationItem>();
            int counter = 0;
            foreach (var tweet in tweets)
            {
                if (tweet.ContainsLinks)
                {
                    counter++;
                    foreach (var link in tweet.Links)
                    {
                        Console.WriteLine(link.AbsoluteUri);
                    }

                    StringBuilder content = new StringBuilder();
                    content.AppendLine(tweet.text);
                    foreach(var link in tweet.Links)
                    {
                        string linkTag = string.Format(@"<a href='{0}'>{0}</>", link.AbsoluteUri);
                        content.AppendLine(linkTag);
                    }
                    SyndicationItem item = new SyndicationItem(screenName + counter, content.ToString(), new Uri("http://localhost"));
                    items.Add(item);
                }
            }

            var syndicationFeed = new SyndicationFeed("LinkTwrapper", "Tweets containing links", new Uri("http://localhost"))
                { Items = items };
            string timestamp = DateTime.Now.ToString("yyyy-MM-dd_hhmmssfff");
            string filePath = string.Format(@"C:\WS\LinkTwrapper\RSSFiles\Tweets{0}.rss", timestamp);
            using (var fileStream = File.Create(filePath))
            {
                using (var xmlWriter = XmlWriter.Create(fileStream))
                {
                    syndicationFeed.SaveAsRss20(xmlWriter);
                    xmlWriter.Flush();
                }
            }

            Console.ReadLine();
        }
示例#4
0
        public async Task <IActionResult> IssueToken([FromBody] BearerTokenRequest model)
        {
            if (!Debugger.IsAttached)
            {
                return(NotImplemented());
            }
#if DEBUG
            var superUser = _securityOptions.Value.SuperUser;
            if (!superUser.Enabled)
            {
                return(NotFound());
            }

            if (!ValidModelState(out var error))
            {
                return(error);
            }

            bool isSuperUser;
            switch (model.IdentityType)
            {
            case IdentityType.Username:
                isSuperUser = superUser.Username == model.Identity;
                if (!isSuperUser)
                {
                    return(NotFound());
                }
                break;

            case IdentityType.Email:
                isSuperUser = superUser.Email == model.Identity;
                if (!isSuperUser)
                {
                    return(NotFound());
                }
                break;

            case IdentityType.PhoneNumber:
                isSuperUser = superUser.PhoneNumber == model.Identity;
                if (!isSuperUser)
                {
                    return(NotFound());
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var encoding = Encoding.UTF8;
            if (Crypto.ConstantTimeEquals(encoding.GetBytes(model.Password), encoding.GetBytes(_securityOptions.Value.SuperUser.Password)))
            {
                Debug.Assert(nameof(IUserIdProvider.Id) == nameof(IObject.Id));
                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.Role, nameof(SecurityOptions.SuperUser))
                };
                var provider = new { Id = "87BA0A16-7253-4A6F-A8D4-82DFA1F723C1" }.ActLike <IUserIdProvider>();
                var token = JwtSecurity.CreateToken(provider, claims, _securityOptions.Value, _apiOptions.Value);
                return(Ok(new { AccessToken = token }));
            }

            return(Unauthorized());
#endif
            return(NotImplemented());
        }