我有一个自托管的 OWIN 应用程序,配置为授权服务器和信号器资源服务器。
我的客户成功地获得了不记名令牌,并在随后对 signalR 集线器的调用中将其呈现以进行授权。
我的下一步是解耦授权服务,以便它可以在自己的主机上运行。首先,我创建了一个单独的自托管应用程序,其中仅包含授权服务代码。在我的开发机器上它仍然是一个解决方案,但是授权服务和 signalR 资源托管在不同的进程中。
身份验证流程仍然正常工作。令牌正在访问我的资源服务器,但现在从 signalR 集线器获得 401 未经授权。
在 ASP.Net Web API 中有很多解决此问题的支持,您可以在其中同步 web.config 文件中的 machine.config 值。但这不是我的架构。在 HttpListener 下作为自托管应用程序运行使用不同的加密,默认为 DPAPI。
似乎没有太多关于在自托管架构中解决这个问题的讨论。我的理论是,即使在同一台机器上的不同进程下,DPAPI 解密也会失败,所以我得到 401。
我试图弄清楚是否有一些最小的方法来解决这个问题,或者我是否必须完全重构可能使用 JWT。
编辑:添加一些代码来帮助显示我的设置
public void ConfigureOAuth(IAppBuilder app)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = false,
TokenEndpointPath = new PathString("/account/login"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(OAuthServerOptions);
}
public void ConfigureOAuth(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
Provider = new ApplicationOAuthBearerAuthenticationProvider(),
});
}