public async Task ByRefreshToken(OAuthProviderContext context) { ProtectedTicket protectedTicket = await GrantRefreshToken(context.RefreshToken); if (protectedTicket == null) { context.SetError("Invalid refresh token"); return; } if (protectedTicket.clientid != context.ClientId) { context.SetError("Invalid client id"); return; } ClaimsIdentity identity = await GetIdentity(protectedTicket.username, protectedTicket.clientid); if (identity == null) { context.SetError("User not found"); return; } string encodedJwt = CreateJWT(identity); context.SetToken(encodedJwt, context.RefreshToken); return; }
async Task <ProtectedTicket> GrantRefreshToken(string refreshTokenId) { using (var serviceScope = _services.GetRequiredService <IServiceScopeFactory>().CreateScope()) { IAuthRepository _repo = serviceScope.ServiceProvider.GetService <IAuthRepository>(); string hashedTokenId = _helper.GetHash(refreshTokenId); ProtectedTicket protectedTicket = null; var refreshToken = await _repo.FindRefreshToken(hashedTokenId); if (refreshToken != null) { //Get protectedTicket from refreshToken class protectedTicket = JsonConvert.DeserializeObject <ProtectedTicket>(refreshToken.ProtectedTicket); return(protectedTicket); } else { return(null); } } }