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



我正在使用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 2.0并不是为了成为一个身份验证协议而设计的,这就是您遇到这个问题的原因。

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

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

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

最新更新