我有一个现有应用程序,该应用程序使用机器密钥方法生成owin身份令牌。相同的令牌用于验证各种应用程序。该应用程序之一现在位于asp.net核心中。有什么方法可以在asp.net核心中使用相同的owin生成的身份令牌?
或者我们可以在asp.net核心中手动解码该令牌
答案 0 :(得分:0)
您可以直接使用IDataProtector
解密从授权码流返回的访问令牌。我们实现IDataProtector
接口并使用System.Web.Security.MachineKey.Unprotect method
。
制作帮助方法来解密OWIN票证
private class MachineKeyProtector : IDataProtector
{
private readonly string[] _purpose =
{
typeof(OAuthAuthorizationServerMiddleware).Namespace,
"Access_Token",
"v1"
};
public byte[] Protect(byte[] userData)
{
//throw new NotImplementedException();
}
public byte[] Unprotect(byte[] protectedData)
{
return System.Web.Security.MachineKey.Unprotect(protectedData, _purpose);
}
}
获取ClaimsIdentity和属性字典。我们只是创建一个实例并传递令牌以获取解密的票证
var secureDataFormat = new TicketDataFormat(new MachineKeyProtector());
AuthenticationTicket ticket = secureDataFormat.Unprotect(accessToken);
上方的AuthenticationTicket本身包含ClaimsIdentity和属性字典。 请参阅IDataProtector Interface
答案 1 :(得分:0)
使用计算机密钥时,您不能在ASP.NET和ASP.NET Core之间共享任何内容。能够解密由ASP.NET应用程序设置的ASP.NET Core中的某些内容的唯一方法是:1)ASP.NET应用程序使用数据保护提供程序2)数据保护提供程序密钥集持久保存在文件系统中或所有应用程序(ASP.NET和ASP.NET Core都可以访问)访问的网络位置,并且所有应用程序都使用相同的应用程序名称。