Oauth 跨owin自托管进程共享密钥

Oauth 跨owin自托管进程共享密钥,oauth,owin,self-hosting,Oauth,Owin,Self Hosting,我正在尝试为一些自托管owin服务(控制台应用程序)创建令牌服务器 但是,这似乎只有在我在IIS中托管时才可能: 用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供,则默认数据保护提供程序取决于主机服务器。IIS上的SystemWeb主机将使用ASP.NET计算机密钥数据保护,HttpListener和其他自托管服务器将使用DPAPI数据保护。如果分配了不同的访问令牌提供程序或格式,则必须将兼容实例分配给资源服务器的OAuthBeareAuthenticationOptions.Acce

我正在尝试为一些自托管owin服务(控制台应用程序)创建令牌服务器

但是,这似乎只有在我在IIS中托管时才可能:

用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供,则默认数据保护提供程序取决于主机服务器。IIS上的SystemWeb主机将使用ASP.NET计算机密钥数据保护,HttpListener和其他自托管服务器将使用DPAPI数据保护。如果分配了不同的访问令牌提供程序或格式,则必须将兼容实例分配给资源服务器的OAuthBeareAuthenticationOptions.AccessTokenProvider或OAuthBeareAuthenticationOptions.AccessTokenFormat属性。-

如果我在app.config中共享某种密钥,比如如何通过web.config共享机器密钥,那么有没有办法在服务器之间共享密钥?如果没有,那就意味着剩下的唯一选项是实现我自己的AccessTokenProvider(假设我仍然使用内置的OAuth服务器和自主机)

我发现,这让你知道如何在自托管OWIN应用程序中使用机器密钥。请注意,需要对System.Web的引用

在添加了
MachineKeyProtectionProvider
MachineKeyDataProtector
之后,我只添加了保护提供程序,如下所示

//...

app.SetDataProtectionProvider(new MachineKeyProtectionProvider());
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
                                 {
                                      AuthenticationMode = AuthenticationMode.Active
                                 });
app.UseWebApi(config);

我在这里遇到的困难是,初始化的顺序很重要:
UseWebApi
应该在
SetDataProtectionProvider

之后。我在自托管Web API下尝试了MachineKey保护,但没有任何效果。最终对我有效的是在两个项目中指定一个DPAPI保护提供程序:

app.SetDataProtectionProvider(new DpapiDataProtectionProvider("myApp"));

HTH

Hi@ton.yeung。您找到这个问题的解决方案了吗?是的,您自己生成密钥并在owin管道中注册它们。答案是没有意义的,因为内置的OAuth服务器没有更新以用于MVC6。我将研究一种不同的OAuth解决方案以供长期使用。