我有一个现有的应用程序,生成owin身份令牌与机器密钥的方法。相同的令牌用于验证各种应用程序。其中一个应用程序现在位于asp.net核心中。有没有办法在asp.net核心中使用相同的owin生成的身份令牌?
或者我们可以在asp.net核心中手动解码该令牌
发布于 2019-05-28 21:46:11
使用机器密钥时,您不能在ASP.NET和ASP.NET核心之间共享任何内容。能够解密由ASP.NET应用程序设置的ASP.NET核心中的内容的唯一方法是: 1) ASP.NET应用程序利用数据保护提供程序2)数据保护提供程序密钥环被持久保存到所有应用程序(ASP.NET和ASP.NET核心类似)可访问的文件系统或网络位置,并且所有应用程序使用相同的应用程序名称。
发布于 2019-05-27 19:23:27
您可以使用IDataProtector直接解密授权码流返回的访问令牌。我们实现IDataProtector接口并使用System.Web.Security.MachineKey.Unprotect method。使helper方法解密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
https://stackoverflow.com/questions/56324559
复制相似问题