我试图为一些自主的owin服务(控制台应用程序)创建一个令牌服务器
但是,如果我在IIS中托管,这似乎是唯一可能的:
用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供,则默认数据保护提供程序取决于主机服务器。 IIS上的SystemWeb主机将使用ASP.NET机器密钥数据保护, HttpListener和其他自托管服务器将使用DPAPI数据保护。如果分配了不同的访问令牌提供程序或格式,则必须将兼容的实例分配给资源服务器的OAuthBearerAuthenticationOptions.AccessTokenProvider或OAuthBearerAuthenticationOptions.AccessTokenFormat属性。 - MSDN
有没有办法在服务器之间共享密钥如果我通过在app.config中共享某种密钥来自我托管,就像我可以通过web.config共享机器密钥一样?如果没有,这意味着剩下的唯一选择是实现我自己的AccessTokenProvider(假设我仍然使用内置的OAuth服务器和自托管主机)?
答案 0 :(得分:0)
我找到了this answer,它提供了如何在自托管OWIN应用中使用机器密钥的想法。请注意,需要引用System.Web。
添加MachineKeyProtectionProvider
和MachineKeyDataProtector
后,我只需添加保护提供程序,如下所示。
//...
app.SetDataProtectionProvider(new MachineKeyProtectionProvider());
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active
});
app.UseWebApi(config);
我在这里遇到的困难时刻是初始化的顺序很重要:UseWebApi
应该在SetDataProtectionProvider
答案 1 :(得分:0)
我已经尝试在自托管Web API下对MachineKey保护无效。最终对我有用的是在两个项目中都指定一个DPAPI保护提供程序:
app.SetDataProtectionProvider(new DpapiDataProtectionProvider("myApp"));
HTH