【发布时间】:2017-07-18 22:36:40
【问题描述】:
我正在使用 OAuth/Owin 生成令牌,并且该令牌在请求的授权标头中发送回;它会自动进行比较,这就是我验证请求是否来自有效用户的方式。令牌属于不记名类型。
生成token的代码如下:
private string GenerateAuthToken(TelephonyLoginCdto loginDto, double tokenExpirationTimeInHours)
{
//Generate AuthToken
var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, loginDto.Username));
var currentUtc = DateTime.UtcNow;
var props = new AuthenticationProperties()
{
IssuedUtc = currentUtc,
ExpiresUtc = currentUtc.Add(TimeSpan.FromHours(tokenExpirationTimeInHours))
};
var ticket = new AuthenticationTicket(identity, props);
var accessToken = StartUp.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
return accessToken;
}
外部系统会使用我的 API。 流程将是: 1.外部系统先打登录api。登录 api 返回一个令牌。 2. 外部系统使用该令牌并将其传递到另一个请求授权标头中,以使用 API 的另一种方法进行一些更新。
他们可以在一天内多次重复上述过程,比如5~6次。他们来点击登录;获得令牌。通过调用 API 的 save/get 方法,使用该令牌执行一些操作。
我的问题是,当外部系统长时间没有使用我的任何 API 方法并且处于空闲状态时。现在,如果外部系统必须点击 API 来做某事,他们需要再次点击登录 API 以获取令牌,然后使用其他 API 方法。如果他们更频繁地说在 10~15 分钟内返回令牌只需要 1~2 秒,但如果他们说在 2~2.5 小时后我的登录 API 需要 30 秒来返回令牌。
我没有做任何刷新令牌机制,我想它会花费这么多时间,因为已经生成了这么多令牌,并且 owin 正在尝试清理服务器然后给出令牌。我不知道发生了什么?
【问题讨论】:
-
如果不知道可能是什么原因,请尝试记录您的身份验证机制。之后在日志中看看是什么花了这么多时间。
标签: c#-4.0 asp.net-web-api oauth owin