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

时间:2012-06-06 01:31:59

标签: oauth openid restlet

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

但是,我注意到网络应用程序不知道用户是谁(!)。所有Web应用程序都有一个身份验证令牌。因此,Web应用程序不能说“Hello,username”,因为它不知道用户是谁。

使用Restlet技术,身份验证基本上是:     //验证码     OpenIdVerifier verifier = new OpenIdVerifier(OpenIdVerifier.PROVIDER_YAHOO);     verifier.addRequiredAttribute(AttributeExchange.EMAIL);
    Authenticator au = new MyRedirectAuthenticator(getContext(),verifier,null);

以下处理两者身份验证和OAuth2授权:     //身份验证+ OAuth代码:     OAuthParameters params = new OAuthParameters(“2345678901”,“secret2”,“http:// localhost:8888 / v3 /”,roles);     OAuthProxy local = new OAuthProxy(params,getContext());

最初我只在我的网络应用中使用“身份验证+ OAuth”,并且身份验证“无形地”发生(如上所述)。

我认为围绕“问题”的一种方法是,如果网络应用程序“明显地”处理身份验证。所以我将身份验证代码添加到了Web应用程序。流程看起来与用户完全相同,但Web应用程序能够捕获用户信息(电子邮件),一切都很好。似乎与“两个”代码没有任何冲突。

解决问题的另一种方法是向API添加一些内容,返回与authToken相关的用户信息(Twitter的verify_credentials)。

我的问题:我采取的方法是否合理?我应该使用Twitter方法吗?还是完全不同的东西? (我对所有这些东西都很陌生,所以很难弄清楚我是否选择了一个似乎有用的解决方案,只是为了以后打砖墙。)

1 个答案:

答案 0 :(得分:0)

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

我已经使用Restlet和谷歌应用引擎实现了上述方案,允许用户通过OpenId向资源服务器进行身份验证,并为Web客户端应用添加Google身份验证(这样就可以发出“hello”消息)。一切似乎都很好。