我有基于.NET 4.5.1构建的授权服务器并使用Microsoft.Owin.Security.OAuth Version = 3.0.0 http://prntscr.com/hvwhl4 通过machinkey保护的标记(OAuthAuthorizationServerOptions.AccessTokenFormat是默认值)。我还在.NET 4.5.1上有许多应用程序使用者(资源服务器)来验证这些令牌http://prntscr.com/hvwwdu http://prntscr.com/hvwiwr。所有这些应用程序在web.config中具有相同的machinkey
现在我尝试构建.net core 2.0应用程序,我需要使用来自我的Auth服务器(.net 4.5.1 owin 3.0.0)的相同令牌。如何从.net core 2.0中的Microsoft.Owin.Security.OAuth(3.0.0)令牌验证和读取声明?
一个注意事项:我无法更改Auth服务器并在Auth服务器中定义DataProtector。所以我需要找到一种方法来解码"使用现有机器密钥在.net核心中使用OWIN令牌。
更新:所以我在github上发布了问题https://github.com/aspnet/Security/issues/1592
现在它已关闭,答案是:"关闭,因为没有计划支持这一点。您可以使用第三方令牌服务器(如Identity Server)发出可与两个系统配合使用的令牌。或者,您可以编写ASP.NET Core的自定义代码来处理OWIN / Katana样式的令牌。"
我找到了一种解决方案。我在Auth服务器中使用Autofac.Integration.Owin包和OAuthAuthorizationServerMiddleware来定义运行时从哪个资源服务器获取请求,然后定义我需要返回令牌的格式。
答案 0 :(得分:2)
我对此软件包Owin.Token.AspNetCore实现了一种解决方法。
var ticket = LegacyOAuthSecurityTokenHelper.GetTicket(token, new LegacyTokenAuthenticationOptions
{
DecryptionKey = "machineKey-DecryptionKey",
ValidationKey = "machineKey-ValidationKey",
EncryptionMethod = EncryptionMethod.AES, // Default AES
ValidationMethod = ValidationMethod.HMACSHA256 // Default HMACSHA256
}));
// Authenticate your user with ticket.Identity.Claims!