Example #1
0
        /// <summary>
        /// 收到刷新令牌
        /// </summary>
        /// <param name="obj"></param>
        private Task ReceiveRefreshTokenAsync(AuthenticationTokenReceiveContext arg)
        {
            YFPLUS_RefreshToken model = null;

            Guid ID = Guid.Parse(arg.Token);


            using (DSCSYSEntities context = new DSCSYSEntities())
            {
                model = context.YFPLUS_RefreshToken.Find(ID);
                if (model == null)
                {
                    return(Task.FromResult(0));
                }
                context.YFPLUS_RefreshToken.Remove(model);
                context.SaveChanges();
            }

            //解码保护资源
            arg.DeserializeTicket(model.ProtectedTicket);

            //因为原 Ticket 已经失效,所以才要刷新,这里需要新生成一个 Ticket 。
            DateTime now = DateTime.UtcNow;

            Dictionary <string, string> param = new Dictionary <string, string>();

            foreach (var kv in arg.Ticket.Properties.Dictionary)
            {
                if (kv.Key != ".issued" && kv.Key != ".expires")
                {
                    param.Add(kv.Key, kv.Value);
                }
            }

            param.Add(".issued", now.ToString("R"));
            param.Add(".expires", (now + AccessTokenExpireTimeSpan).ToString("R"));

            AuthenticationTicket ticket = new AuthenticationTicket(arg.Ticket.Identity, new AuthenticationProperties(param));

            arg.SetTicket(ticket);

            return(Task.FromResult(0));
        }
Example #2
0
        /// <summary>
        /// 将核心信息保存到数据库中,并返回 RefreshTokenID
        /// </summary>
        /// <param name="client_id"></param>
        /// <param name="user_id"></param>
        /// <param name="ticket"></param>
        /// <returns></returns>
        private static string GetRefreshToken(int client_id, int?user_id, string ticket)
        {
            var now = DateTime.UtcNow;

            YFPLUS_RefreshToken refreshTokenModel = new YFPLUS_RefreshToken()
            {
                ClientID        = client_id,
                UserID          = user_id,
                IssuedUtc       = now,
                ExpiresUtc      = now.AddHours(3),
                ProtectedTicket = ticket
            };

            using (DSCSYSEntities context = new DSCSYSEntities())
            {
                context.YFPLUS_RefreshToken.Add(refreshTokenModel);
                context.SaveChanges();
            }
            string refreshToken = refreshTokenModel.ID.ToString("N");

            return(refreshToken);
        }