asp.net - 重新部署后不记名 token 失效

标签 asp.net asp.net-mvc azure asp.net-web-api

我们有 ASP.NET MVC 5.x WebAPI 2.x Web 应用程序作为 Azure 云服务运行,并使用 token 授权对我们的服务进行 REST API 调用。

问题是:每次我们重新部署应用程序时,所有当前 token 都会变得无效(服务器对任何请求返回“未经授权”的响应)。

问题是:为什么会发生这种情况以及如何防止这种行为?

更新: 这是颁发 token 的代码:

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 "";
}

更新2: 看来默认 token 端点(/Token)生成的 token 在重新部署后不会变得无效 - 所以问题(我认为)出在我们为“手工制作” token 设置的某些属性中。 在哪里可以找到创建默认 token (由/Token 端点返回)的代码?

最佳答案

问题已解决。 看来默认创建的 AccessTokenFormat 使用 machineKey 来生成 token 。显然,这些 key 对于生产虚拟机和临时虚拟机来说是不同的。 解决方案相当简单。您需要生成自己的机器 key 并将其添加到项目的 Web.Config 文件中:

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />

    <machineKey
      validationKey="YOUR VALIDATION KEY GOES HERE"
      decryptionKey="YOUR DECRYPTION KEY GOES HERE"
      validation="SHA1" decryption="AES"
    />

有关此方法的更多信息,您可以阅读本文的“第 5 步...”部分: http://bitoftech.net/2014/09/24/decouple-owin-authorization-server-resource-server-oauth-2-0-web-api/

关于asp.net - 重新部署后不记名 token 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31205021/

相关文章:

c# - 从 Postgresql 数据库 ServiceStack.Ormlite 生成类对象

c# - asp.net 在更改下拉列表时使用 javascript 填充下拉列表

asp.net-mvc - ASP.NET MVC Controller 静态方法

asp.net-mvc - 对 IIS 上长时间运行的进程的担忧

asp.net-mvc - ASP.NET MVC 通配符映射 IIS 6 不工作

azure - 如何在terraform中使用azurerm_virtual_machine资源的custom_data字段?

azure - 如何从azure函数的appinsight中排除异常?

javascript - click() 触发多次

php - asp.net合并压缩css、js文件

Lucene.Net 的 Azure 库 - FileNotFound 异常