如何手动解密asp.net core中的asp.net owin令牌?

时间:2019-05-27 10:46:18

标签: asp.net-core machinekey

我有一个现有应用程序,该应用程序使用机器密钥方法生成owin身份令牌。相同的令牌用于验证各种应用程序。该应用程序之一现在位于asp.net核心中。有什么方法可以在asp.net核心中使用相同的owin生成的身份令牌?

或者我们可以在asp.net核心中手动解码该令牌

2 个答案:

答案 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都可以访问)访问的网络位置,并且所有应用程序都使用相同的应用程序名称。

docs go into great detail on this