重新部署后,承载令牌变为无效

时间:2015-07-03 10:51:09

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

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

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

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

UPD: 以下是发出令牌的代码:

            IRfcFunction rfcFunc = repository.CreateFunction("BAPI_XMI_LOGON");
            rfcFunc.SetValue("extcompany", "testC");
            rfcFunc.SetValue("extproduct", "testP");
            rfcFunc.SetValue("interface", "XBP");
            rfcFunc.SetValue("version", "3.0");

            rfcFunc.Invoke(dest);

            rfcFunc = repository.CreateFunction("BAPI_XBP_JOB_START_IMMEDIATELY");
            rfcFunc.SetValue("jobname", "MYSCHEDULEDJOB");
            rfcFunc.SetValue("jobcount", "15530600");
            rfcFunc.SetValue("external_user_name", "username");

            rfcFunc.SetValue("target_server", "devsapsystem");
            rfcFunc.Invoke(dest);

UPD2: 看起来默认令牌endpoing(/ Token)生成的令牌在重新部署后不会变得无效 - 所以问题(我认为)是我们为“手工”令牌设置的一些属性。 我在哪里可以找到创建默认令牌的代码(由/ Token端点返回)?

2 个答案:

答案 0 :(得分:4)

问题解决了。 看来默认创建的AccessTokenFormat使用machineKey来生成令牌。显然,这些密钥对于生产和暂存VM来说是不同的。 解决方案相当容易。您需要生成自己的机器密钥并将其添加到项目的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/

答案 1 :(得分:1)

不是一个完整的答案,但现在我们至少知道这种行为的原因。

问题在于我们的云服务的暂存/生产部署。 我们将服务部署到分段然后交换。在那一刻,在先前部署时发出的令牌变为无效。如果我们第二次这样做(部署到暂存相同的版本然后交换) - 它再次变为有效。 因此,显然任何已发布的令牌都包含一些与系统(真实或虚拟)的链接,此时服务正在该系统上运行。

剩下的主要问题是:是否有可能删除该链接或以某种方式控制它?