确定oauth回调中的用户ID

时间:2011-01-02 07:37:06

标签: oauth

OAuth流程是:

  1. 对于OAuth身份验证,应用(a.k.a OAuth客户端)会将用户重定向到 authorize_url

  2. 这会将用户重定向到oauth服务器的网络服务器,用户将在该服务器上授予 网络应用访问他/她的帐户

  3. OAuth服务器将用户重定向到由。提供的回调网址 申请(a.k.a oauth客户)。此时,回调来自OAuth服务器,因此没有会​​话ID或会话哈希。应用程序如何确定要为哪个用户调用post-oauth回调?

  4. 我虽然这样做的方式是:

    1. 当您将用户重定向到authorize_url时,您会附加某些内容 查询字符串?id=xxx

    2. 的参数
    3. 当OAuth服务器重定向到由。提供的callback_url时 客户端,其中一个带有HTTP消息的参数将是 在步骤1中附加到查询字符串的参数。

    4. 但是,这似乎对我试图加入的OAuth服务器不起作用。

      有什么建议吗?

4 个答案:

答案 0 :(得分:4)

用户验证了您的请求令牌后(通过输入用户名和密码),您应该将oauth_token和oauth_verifier参数发回,并附加到回调中。

如果这样可行,但回调中未包含您在回调中指定的其他参数,那么提供商可能只是忽略您在请求令牌步骤中发送的oauth_callback 。

如果是这种情况,提供者将引用预定义的回调,通常是您在获取消费者密钥和密钥时指定的回调。

允许OAuth提供程序忽略授权流程期间发送的回调(签名除外)。一些提供商这样做是为了增加额外的安全层。

答案 1 :(得分:2)

您可以使用state参数,auth服务器也必须仅基于访问令牌提供用户详细信息服务。

答案 2 :(得分:1)

“这不起作用”是什么意思?

服务器不回发查询部分?您必须在您提供给oauth服务器的回调URL中对状态进行编码。这可以在查询或路径部分中完成。我认为没有理由不这样做?

也许你假设你有一个自动扩展状态的单一通用回调?据了解情况并非如此。

修改

我在Google的实施中重新阅读了文档:

You can specify a value for oauth_callback in an OAuthGetRequestToken request, 
to determine where Google redirects the user after they authorize your access 
request. The callback URL can include query parameters. The redirect will include 
the same query parameters, as well as the authorized request token, which your
application must be able to parse.

For example, when supporting multiple languages, you can include 
a query parameter that identifies the version of the application that a user is
viewing. An oauth_callback value of "http://www.yoursite.com/Retrievetoken?Lang=de"
would result in the redirect 
"http://www.yoursite.com/Retrievetoken?Lang=de&oauth_token=DQAADKEDE". 
Parsing the token and the language parameter ensures that the user is 
redirected back to the correct version of the site.

SO(与我上面的陈述相反)OAuth服务器主动将信息(& oauth_token = kkk)附加到您的网址。该令牌应与您从“OAuthGetRequestTOken”获得的结果相同。这不适合你吗?

据我所知,服务器应该直接复制callback_url中所有内容添加从服务调用中收到的令牌

您是否记录了OAuth服务器调用的完全的内容?谁是服务提供商?我无法想象他错过了这个功能......

答案 3 :(得分:0)

我看不出您要将OAuth提供商的ID发送到OAuth Consumer的原因。您能解释一下为什么需要这样做吗?

如果您有与您的用户关联的会话cookie,您将知道哪个用户会回复您(重定向后),因为您可以与他进行会话 - 他将通过浏览器重定向并返回您的cookie。 / p>

即使OAuthProvider向您发送其内部用户ID(我认为这是不必要且非常不可能),您打算怎么做 - 它与您的内部网站用户ID不匹配,它与用户完全不同 - 提供者网站的ID ...或者我可能无法很好地得到您的问题....

祝你好运