【问题标题】:About persisting DotNetOpenAuth 4.0 client tokens关于持久化 DotNetOpenAuth 4.0 客户端令牌
【发布时间】:2012-04-04 11:58:59
【问题描述】:

我正在使用 DotNetOpenAuth 4.0.0 开发 OAuth2.0 客户端

我对 OAuth 2.0 客户端示例项目下的“SampleWcf2.aspx”页面有疑问。

在此页面中,属性 IAuthorizationState Authorization 注释如下:

    /// <remarks>
    /// Because this is a sample, we simply store the authorization information in memory with the user session.
    /// A real web app should store at least the access and refresh tokens in this object in a database associated with the user.
    /// </remarks>

如何在使用 CallService 方法之前获取最终用户的用户名? 我想如果我想将令牌保存在数据库中,则需要最终用户的用户名作为主键。 在我的项目中,我使用 Cassandra 来存储令牌,并且我必须使用 username 作为 RowKey。

你能告诉我有什么方法可以得到用户名吗?

等待您的回复。

BR

【问题讨论】:

    标签: oauth dotnetopenauth access-token persist


    【解决方案1】:

    您从服务提供商处获得的用户名不是您的客户端应用程序的良好主键。用户名可以被回收(Yahoo!例如将他们废弃的用户名重新发布给新的活跃用户),然后您将面临重大的隐私问题。 OAuth 2.0 并非设计为身份验证协议,这就是您遇到此问题的原因。

    最好先将用户登录到您自己的站点(可能使用 OpenID 2.0,它确实提供了可用作主键的可靠声明标识符),然后将它们发送到授权服务器获得访问其私人数据的权限。

    事实上,在某些情况下,您甚至可以通过 OpenID+OAuth 扩展将 OpenID 身份验证与 OAuth 授权相结合。然后,您将获得可用作用户名的可靠声明标识符,以及随后可用于检索其他用户数据的 OAuth 访问令牌。

    但是要从另一个角度回答您的问题,在您知道用户名之前,不要费劲地将访问令牌存储在您的数据库中。因此,如果您确实需要从服务中获取用户名,请使用您的访问令牌(仍在内存中)调用资源服务器的 Web API 以获取用户的用户名(这取决于您正在调用的服务)然后您有用于存储访问和刷新令牌的用户名。

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2018-01-13
      • 2012-08-23
      • 2014-03-19
      • 1970-01-01
      • 2012-08-11
      • 2014-11-08
      • 1970-01-01
      相关资源
      最近更新 更多