关于持久化DotNetOpenAuth 4.0客户端令牌

时间:2012-04-03 03:07:47

标签: oauth dotnetopenauth access-token persist

我正在使用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

1 个答案:

答案 0 :(得分:1)

您从服务提供商处获得的用户名 是您客户端应用的主要密钥。用户名可以被回收(例如Yahoo!将他们放弃的用户名重新发布给新的活跃用户)然后你手上就会遇到严重的隐私问题。 OAuth 2.0并非旨在成为身份验证协议,这就是您遇到此问题的原因。

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

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

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