Ser*_*giy 5 asp.net asp.net-mvc azure asp.net-web-api
我们将 ASP.NET MVC 5.x WebAPI 2.x Web 应用程序作为 Azure 云服务运行,并使用令牌授权对我们的服务进行 REST API 调用。
问题是:每次我们重新部署我们的应用程序时 - 所有当前令牌都变得无效(服务器对任何请求都返回“非授权”响应)。
问题是:为什么会发生这种情况以及如何防止这种行为?
UPD:这是发出令牌的代码:
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 "";
}
Run Code Online (Sandbox Code Playgroud)
UPD2:似乎由默认令牌端点 (/Token) 生成的令牌在重新部署后不会失效 - 所以问题(我认为)出在我们为“手工”令牌设置的某些属性中。我在哪里可以找到创建默认令牌的代码(由 /Token 端点返回)?
不是一个完整的答案,但现在我们至少知道这种行为的原因。
问题出在我们的云服务的暂存/生产部署中。我们将服务部署到暂存区,然后进行交换。在那一刻,先前部署中颁发的令牌将失效。如果我们第二次这样做(部署到同一个版本,然后交换) - 它会再次有效。因此,显然任何发行的令牌都包含与当前运行服务的系统(真实或虚拟)的一些链接。
剩下的主要问题是:是否可以删除该链接或以某种方式控制它?
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |