使用OAuth2时获取用户信息-以下情况是否合理?

使用OAuth2时获取用户信息-以下情况是否合理?,oauth,openid,restlet,Oauth,Openid,Restlet,我正在创建一个API(Restlet,GAE),并实现了用于身份验证的OpenId和用于保护对API访问的OAuth2。当从我构建的客户端web应用程序测试时,一切正常。当用户点击web应用程序中希望访问API的部分时,会要求用户通过OpenId登录,然后要求用户授予访问web应用程序的权限,以从API获取资源 但是,我注意到web应用程序不知道用户是谁(!)。web应用程序只有一个身份验证令牌。因此,web应用程序不能说“你好,用户名”,因为它不知道用户是谁 使用Restlet技术,身份验证本

我正在创建一个API(Restlet,GAE),并实现了用于身份验证的OpenId和用于保护对API访问的OAuth2。当从我构建的客户端web应用程序测试时,一切正常。当用户点击web应用程序中希望访问API的部分时,会要求用户通过OpenId登录,然后要求用户授予访问web应用程序的权限,以从API获取资源

但是,我注意到web应用程序不知道用户是谁(!)。web应用程序只有一个身份验证令牌。因此,web应用程序不能说“你好,用户名”,因为它不知道用户是谁

使用Restlet技术,身份验证本质上是: //认证码 OpenIdVerifier verifier=新的OpenIdVerifier(OpenIdVerifier.PROVIDER\u YAHOO); verifier.addRequiredAttribute(AttributeExchange.EMAIL)
Authenticator au=新的MyRedirectAuthenticator(getContext(),验证器,null)

而下面处理身份验证和OAuth2授权: //身份验证+OAuth代码: OAuthParameters params=新的OAuthParameters(“2345678901”、“secret2”和http://localhost:8888/v3/“、角色); OAuthProxy local=新的OAuthProxy(参数,getContext())

最初,我只是在我的web应用程序中使用“Authentication+OAuth”,而身份验证是“不可见的”(如上所述)

我认为解决“问题”的一个方法是,如果web应用程序“明显地”处理身份验证。因此,我将身份验证代码添加到web应用程序中。对于用户来说,流程看起来完全一样,但是web应用程序能够捕获用户信息(电子邮件),一切都很好。“两者”代码似乎也没有任何冲突

解决此问题的另一种方法是向API添加一些内容,以返回与authToken(la Twitter的verify_凭证)关联的用户信息


我的问题是:我采取的方法是否合理?我应该改用Twitter吗?还是完全不同的东西?(我对所有这些东西都很陌生,所以很难确定我是否选择了一个似乎有效的解决方案,只是后来遇到了麻烦)。

简单的回答是,当客户端web应用程序获得代表用户访问OAuth资源的权限时,客户端web应用程序不应该了解用户的任何信息(登录、密码等)。如果客户端web应用想知道用户是谁,它可以提供身份验证

我已经用Restlet和googleappengine实现了上述方案,允许用户通过OpenId向资源服务器进行身份验证,还为web客户端应用添加了google身份验证(只是为了让它能发出“hello”消息)。一切似乎都很好