コード例 #1
0
 /// <summary>
 /// 创建refreshToken
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public override async Task CreateAsync(AuthenticationTokenCreateContext context)
 {
     if (string.IsNullOrEmpty(context.Ticket.Identity.Name)) return;
     var clietId = context.OwinContext.Get<string>("as:client_id");
     if (string.IsNullOrEmpty(clietId)) return;
     var refresh_token_time = context.OwinContext.Get<string>("as:refresh_token_time");
     if (string.IsNullOrEmpty(refresh_token_time)) return;
     string IpAddress = context.Request.RemoteIpAddress + ":" + context.Request.RemotePort;
     var token = new Token()
     {
         ClientId = clietId,
         UserName = context.Ticket.Identity.Name,
         IssuedUtc = DateTime.UtcNow,
         ExpiresUtc = DateTime.UtcNow.AddSeconds(Convert.ToDouble(refresh_token_time)),
         IpAddress = IpAddress
     };
     context.Ticket.Properties.IssuedUtc = token.IssuedUtc;
     context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;
     token.AccessToken = context.SerializeTicket();
     token.RefreshToken = await _clientAuthorizationService.GenerateOAuthClientSecretAsync();
     if (await _clientAuthorizationService.SaveTokenAsync(token))
     {
         context.SetToken(token.RefreshToken);
     }
     /*
     // maybe only create a handle the first time, then re-use for same client
     // copy properties and set the desired lifetime of refresh token
     var tokenProperties = new AuthenticationProperties(context.Ticket.Properties.Dictionary)
     {
         IssuedUtc = context.Ticket.Properties.IssuedUtc,
         ExpiresUtc = context.Ticket.Properties.ExpiresUtc
     };
     var token = context.SerializeTicket();
     var refreshTicket = new AuthenticationTicket(context.Ticket.Identity, tokenProperties);
     _refreshTokens.TryAdd(token, refreshTicket);
     // consider storing only the hash of the handle
     context.SetToken(token);
     */
 }
 //<summary>
 //创建Token
 //</summary>
 //<param name="context">上下文</param>
 //<returns></returns>
 public override async Task CreateAsync(AuthenticationTokenCreateContext context)
 {
     if (string.IsNullOrEmpty(context.Ticket.Identity.Name)) return;
     string IpAddress = context.Request.RemoteIpAddress + ":" + context.Request.RemotePort;
     var token = new Token()
     {
         ClientId = context.Ticket.Identity.Name,
         ClientType = "client_credentials",
         Scope = context.Ticket.Properties.Dictionary["scope"],
         UserName = context.Ticket.Identity.Name,
         IssuedUtc = DateTime.Parse(context.Ticket.Properties.IssuedUtc.ToString()),
         ExpiresUtc = DateTime.Parse(context.Ticket.Properties.IssuedUtc.ToString()),
         IpAddress = IpAddress
     };
     token.AccessToken = context.SerializeTicket();
     token.RefreshToken = string.Empty;//await _clientAuthorizationService.GenerateOAuthClientSecretAsync();
     //Token没有过期的情况强行刷新,删除老的Token保存新的Token
     if (await _clientAuthorizationService.SaveTokenAsync(token))
     {
         context.SetToken(token.AccessToken);
     }
 }
コード例 #3
0
        /// <summary>
        /// 保持票据
        /// </summary>
        /// <param name="token">票据</param>
        /// <returns></returns>
        public async Task<bool> SaveTokenAsync(Token token)
        {
            const string cmdText = @"INSERT INTO Tokens(clientId,userName,accessToken ,refreshToken,issuedUtc ,expiresUtc,IpAddress) VALUES(@clientId,@userName,@accessToken ,@refreshToken,@issuedUtc ,@expiresUtc,@IpAddress)";
            try
            {
                // return await new SqlConnection(DbSetting.App).InsertAsync(token) != 0;
                return await new SqlConnection(DbSetting.App).ExecuteAsync(cmdText, new
                {
                    clientId = token.ClientId,
                    userName = token.UserName,
                    accessToken = token.AccessToken,
                    refreshToken = token.RefreshToken,
                    issuedUtc = token.IssuedUtc,
                    expiresUtc = token.ExpiresUtc,
                    IpAddress = token.IpAddress

                }) != 0;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
コード例 #4
0
 /// <summary>
 /// 保持票据
 /// </summary>
 /// <param name="token">票据</param>
 /// <returns></returns>
 public async Task<bool> SaveTokenAsync(Token token)
 {
     return await _clientAuthorizationRepository.SaveTokenAsync(token);
 }