如何从类库中取消保护owin承载令牌

时间:2019-07-15 18:57:49

标签: c# authentication encryption token owin

我有一个DDD应用程序,试图在助手项目中从owin令牌获取索取权。我找到了this,但是我需要将解密与控制器项目解耦。

我在Unprotect函数中遇到错误“ System.Web.dll中发生CryptographicException”。我猜想它无法访问机器密钥,因为它通常在web.config中。

我尝试将机器密钥复制到帮助程序项目的app.config中,但这没有用。我已经有一个可以测试的令牌字符串。

我尝试过的app.config

<configuration>
  ...
  <system.web>
    <machineKey validationKey="123546" decryptionKey="abcdefg" validation="SHA1" decryption="AES" />
  </system.web>
</configuration> 

助手类库项目中的功能

public static string GetClaimValueFromToken(string token, string claimName)
        {
            var secureDataFormat = new TicketDataFormat(new MachineKeyProtector());
            AuthenticationTicket ticket = secureDataFormat.Unprotect(token);

            return ticket.Identity.FindFirst(claimName).Value;
        }



        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);
            }
        }

令牌在控制器上正常工作,我希望保持这种状态。我要做的就是能够获取令牌字符串并获得Claims值。令牌是在其他地方生成的,但是机器密钥是相同的。

感谢您的帮助,我无法在网上找到很多以脱钩方式使用m $ owin的信息。

0 个答案:

没有答案