새로 고침 토큰이 만료 시간을 연장하지 않습니다.이를 슬라이딩 만료라고하며 액세스 토큰으로는 할 수 없습니다. 만료 시간이 아닌 새로 고침 토큰을 사용하여 사용자 역할을 업데이트했습니다. 점검 Slidingexpiration 이 Link 나는 아래 토큰 새로 고침 코드는 이제 요청 문맥이 사용자에 대해 이전에 저장된 모든 주장을 포함
public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider
{
public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
var clientid = context.Ticket.Properties.Dictionary["as:client_id"];
if (string.IsNullOrEmpty(clientid))
{
return;
}
var refreshTokenId = Guid.NewGuid().ToString("n");
using (AuthRepository _repo = new AuthRepository())
{
var refreshTokenLifeTime = context.OwinContext.Get<string>("as:clientRefreshTokenLifeTime");
var token = new RefreshToken()
{
Id = Helper.GetHash(refreshTokenId),
ClientId = clientid,
Subject = context.Ticket.Identity.Name,
IssuedUtc = DateTime.UtcNow,
ExpiresUtc = DateTime.UtcNow.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
};
context.Ticket.Properties.IssuedUtc = token.IssuedUtc;
context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;
token.ProtectedTicket = context.SerializeTicket();
var result = await _repo.AddRefreshToken(token);
if (result)
{
context.SetToken(refreshTokenId);
}
}
}
public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin");
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
string hashedTokenId = Helper.GetHash(context.Token);
using (AuthRepository _repo = new AuthRepository())
{
var refreshToken = await _repo.FindRefreshToken(hashedTokenId);
if (refreshToken != null)
{
//Get protectedTicket from refreshToken class
context.DeserializeTicket(refreshToken.ProtectedTicket);
var result = await _repo.RemoveRefreshToken(hashedTokenId);
}
}
}
}
지속을 사용하고, 당신은 당신을 허용하는 로직을 추가 할 필요가 새 클레임을 발급하거나 기존 클레임을 업데이트하고 이전에 생성 된 새 액세스 토큰에 포함 시키려면 AuthorizationServerProvider 클래스에 아래 코드를 추가해야합니다. 당신이 어떤 새로운 값으로 설정, 수명을하지 읽고
DateTime refreshTokenLifeTime = context.OwinContext.Get<DateTime>("as:clientRefreshTokenLifeTime");
public override Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
{
var originalClient = context.Ticket.Properties.Dictionary["as:client_id"];
var currentClient = context.ClientId;
if (originalClient != currentClient)
{
context.SetError("invalid_clientId", "Refresh token is issued to a different clientId.");
return Task.FromResult<object>(null);
}
// Change auth ticket for refresh token requests
var newIdentity = new ClaimsIdentity(context.Ticket.Identity);
newIdentity.AddClaim(new Claim("newClaim", "newValue"));
var newTicket = new AuthenticationTicket(newIdentity, context.Ticket.Properties);
context.Validated(newTicket);
return Task.FromResult<object>(null);
}
여기서 제공된 코드에서 다른 만료 시간을 설정 했습니까? 이 코드에서 두 개의 만료 시간이 같은 값으로 설정되어 있습니다. – Evk
새로 고침 토큰입니다 –
액세스 토큰에 대한 논리를 추가하십시오. 시간이 같으면 두 토큰을 모두 볼 필요가 있습니다. – Dan