【问题标题】:ASP.NET OAuth: How is access token generated?ASP.NET OAuth:如何生成访问令牌?
【发布时间】:2015-02-10 02:18:02
【问题描述】:

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

在链接的文章中,作者说:

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

幕后究竟发生了什么?只是我很好奇,我不喜欢使用黑盒,我喜欢了解背后的代码,因为它通常可以帮助我理解更大的图景。

我想看看负责生成令牌的部分。我发现Validated 基本上是just sets some properties 但我找不到访问令牌字符串在哪里生成。

另外,只是为了实验和学习(所以请不要因为“发明自己的安全性”而对我大喊大叫),是否可以定义自己的编码/解码方式那些令牌?

【问题讨论】:

    标签: c# asp.net oauth


    【解决方案1】:

    我找到了!

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

    ISecureDataFormat<T> 的接口很简单,只有两个方法:Protect(T data)Unprotect(string protectedText)。因此,如果您想要自己的访问令牌格式,只需实现此接口并分配一个新实例作为您的 AccessTokenFormat。

    默认实现似乎是SecureDataFormat (source here),它使用IDataSerializer<T>IDataProtectorITextEncoder ...它使用序列化器将对象序列化为字节,然后通过保护器,该结果最终通过文本编码器...取消保护是相反的方向。

    那么,IDataSerializer<T>IDataProtector 的默认实现是什么?有three serializers in OWIN,而且似乎用于序列化票证的是TicketSerializer (source here)

    IDataProtector 似乎被实现为使用class of the same name from a System.Security.Cryptography namespaceDpapiDataProtector (source) 并且似乎是封闭源代码,认为 Protect 和 Unprotect 方法是从 DataProtector class 继承的

    我不知道“Dpapi”是什么,所以我搜索了一下,在this article from 2001...中发现了一个名为 Windows 数据保护的东西...

    我希望这对其他人有用。

    【讨论】:

    • 嗨,你知道默认使用哪个ITextEncoder吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2011-12-04
    • 2020-08-10
    • 2018-03-10
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多