我有一个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的信息。