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

Oauth 关于持久化DotNetOpenAuth 4.0客户端令牌,oauth,dotnetopenauth,access-token,persist,Oauth,Dotnetopenauth,Access Token,Persist,我正在使用DotNetOpenAuth 4.0.0开发OAuth2.0客户端 我对OAuth2.0客户机示例项目下的页面“SampleWcf2.aspx”有一个问题 在此页面中,属性IAAuthorizationState Authorization的注释如下: /// <remarks> /// Because this is a sample, we simply store the authorization information in memory with

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

我对OAuth2.0客户机示例项目下的页面“SampleWcf2.aspx”有一个问题

在此页面中,属性IAAuthorizationState 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>
//
///由于这是一个示例,我们只需将授权信息与用户会话一起存储在内存中。
///一个真正的web应用程序应该在与用户关联的数据库中至少存储该对象中的访问和刷新令牌。
/// 
在使用CallService方法之前,如何获取最终用户的用户名? 我认为,如果我想将令牌保存在数据库中,那么最终用户的用户名就必须作为主键。 在我的项目中,我使用Cassandra存储令牌,并且必须使用username作为行键

你能告诉我有没有办法得到用户名

等待您的答复


BR

您从服务提供商处获得的用户名不是客户端应用程序的良好主键。用户名可以循环使用(例如,Yahoo!将其放弃的用户名重新发布给新的活跃用户),然后您的手上就会有一个重大的隐私问题。OAuth2.0不是设计为一个身份验证协议,这就是为什么会出现这个问题

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

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

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