ASP.NET OAuth:如何生成访问令牌?

时间:2015-02-09 09:37:56

标签: c# asp.net oauth

我从this great tutorial了解ASP.NET中的访问令牌和OAuth ......我有一个问题。

在链接文章中,作者说:

  

现在,当我们调用“context.Validated(identity)”时,生成令牌会在幕后发生。

幕后究竟发生了什么?只是我很好奇,我不喜欢使用黑匣子,我喜欢知道背后的代码,因为它经常帮助我理解更大的画面。

我希望看到负责令牌生成的部分。我发现Validated基本上just sets some properties,但我无法找到生成访问令牌字符串的位置。

另外,仅仅是为了实验和学习(所以请不要因为我发明自己的安全性而对我大喊大叫#34;),是否可以定义你自己编码/解码这些令牌的方法吗?

1 个答案:

答案 0 :(得分:3)

我找到了它!

OAuthAuthorizationServerOptions中,您可以指定AccessTokenFormat类型的ISecureDataFormat<AuthenticationTicket>属性。

界面ISecureDataFormat<T>非常简单,它只有两种方法:Protect(T data)Unprotect(string protectedText)。因此,如果您需要自己的访问令牌格式,只需实现此接口并将新实例指定为AccessTokenFormat。

默认实现似乎是SecureDataFormatsource here),它使用IDataSerializer<T>IDataProtectorITextEncoder ...它使用序列化程序来序列化对象到字节,那些然后通过保护器,结果最终通过文本编码器... Unprotect是在opossite方向相同的事情。

那么,IDataSerializer<T>IDataProtector的默认实施是什么?有three serializers in OWIN,用于序列化门票的确定似乎是TicketSerializersource here

IDataProtector似乎被实现为DpapiDataProtectorsource),它使用class of the same name from a System.Security.Cryptography namespace并且似​​乎是封闭源,因为Protect和Unprotect方法是从{{继承的3}}

我不知道&#34; Dpapi&#34;是这样我用Google搜索并在DataProtector class中发现了一个名为 Windows数据保护的东西......

我希望这对其他人有用。