【发布时间】:2015-09-21 04:33:35
【问题描述】:
我们有 ASP.NET MVC 5.x WebAPI 2.x Web 应用程序作为 Azure 云服务运行,并使用令牌授权对我们的服务进行 REST API 调用。
问题是:每次我们重新部署应用时 - 所有当前令牌都变得无效(服务器对任何请求都返回“未授权”响应)。
问题是:为什么会发生以及如何防止这种行为?
更新: 下面是颁发令牌的代码:
public string GetOAuthToken(IUser user) {
if (user != null) {
var identity = new ClaimsIdentity(Startup.OAuthOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = DateTime.UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromDays(36600)); //About 100 years
string AccessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);
return AccessToken;
}
return "";
}
UPD2: 似乎默认令牌端点(/Token)生成的令牌在重新部署后不会变得无效 - 所以问题(我认为)出在我们为“手工”令牌设置的一些属性中。 在哪里可以找到创建默认令牌(由 /Token 端点返回)的代码?
【问题讨论】:
-
代币发行者是谁?您重新部署的相同 MVC / WebAPI 应用程序?此外,如果您使用 OWIN 作为后端,您可以插入中间件事件以检查发生这种情况的原因。如果令牌发行者在同一个部署中,则可能会在部署时发生某些变化。如果没有重现您的问题的确切步骤,我们将无能为力。
-
是的,发行者是同一个应用程序。我已经用代码 sn-p 更新了原始问题。是的 - 使用了 OWIN。你能建议在哪里“插入”以检查会发生什么吗?
-
注意:令牌的到期日期设置为今天+100 年 - 只是为了确保问题与令牌到期无关。
标签: asp.net asp.net-mvc azure asp.net-web-api