/// <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)); }
/// <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); }