2

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

4

1 回答 1

1

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

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

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

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

于 2012-04-04T03:58:59.830 回答