有没有办法在AspNetUser表中反序列化ProtectedTicket?

时间:2016-04-07 04:42:44

标签: asp.net security asp.net-web-api asp.net-identity owin

基于我所知道的(如果我错了,请纠正我)'access_token'相当于AspNetUser表中的'protected ticket'字段。它只是哈希。

我打算做的是反序列化受保护的票证以获取access_token值。

我正在尝试支持SSO方案,其中,用户可以使用相同的访问令牌访问多个应用程序。

2 个答案:

答案 0 :(得分:2)

不幸的是,如果使用的哈希函数是加密哈希值,这种情况表明,这在定义上是不可能的(或应该是......)。加密哈希函数被设计成非常昂贵(理想情况下是不可能的)反转,因此最有效的方法是尝试强制执行哈希,即。通过哈希函数运行输入,直到得到一个产生所需输出的输入。即便如此,也不知道你需要多长时间才能找到它。强烈建议不要编写任何依赖于常规强制加密哈希的内容。

当然,可能的输入可能非常小(即,最多16位左右),或者所使用的函数不是加密散列函数(即,它类似于base64编码或rot-13)。在这种情况下,您可能有一种方法可以有效地反转“哈希”。

但是,我强烈怀疑情况并非如此。在这项努力中,我认为你只是运气不好,必须找到另一种方法来获得你想要的功能。

答案 1 :(得分:0)

我想我有点晚了,但应该是可能的。 ProtectedTicket 的数据将由 Microsoft.Owin.Security.ISecureDataFormat.Protect 保护。这不是单向哈希。所以可以逆转。您可以在 Katana 项目(Microsoft 的 Owin 实现)中的 Github 上查找:

https://github.com/aspnet/AspNetKatana/blob/dev/src/Microsoft.Owin.Security/DataHandler/SecureDataFormat.cs

如您所见,该接口还提供了 Unprotect 方法。没有测试,但你可以试一试。