确定oauth回调中的用户id

确定oauth回调中的用户id,oauth,Oauth,OAuth过程是: 对于OAuth身份验证,应用程序(又称OAuth客户端)将用户重定向到 authorize\u url 这将用户重定向到oauth服务器的Web服务器,用户在其中授予 web应用程序访问他/她的帐户 OAuth服务器将用户重定向到 应用程序(又称oauth客户端)。此时,回调来自OAuth服务器,因此没有会话id或会话哈希。应用程序如何确定调用后oauth回调的用户 我认为这样做的方式是: 当您将用户重定向到authorize\u url时,您会附加某些 查询字符串的参数?i

OAuth过程是:

  • 对于OAuth身份验证,应用程序(又称OAuth客户端)将用户重定向到
    authorize\u url

  • 这将用户重定向到oauth服务器的Web服务器,用户在其中授予 web应用程序访问他/她的帐户

  • OAuth服务器将用户重定向到 应用程序(又称oauth客户端)。此时,回调来自OAuth服务器,因此没有会话id或会话哈希。应用程序如何确定调用后oauth回调的用户

  • 我认为这样做的方式是:

  • 当您将用户重定向到
    authorize\u url
    时,您会附加某些 查询字符串的参数
    ?id=xxx

  • 当OAuth服务器重定向到 客户端,HTTP消息的参数之一将是 在步骤1中附加到查询字符串的参数

  • 但是,对于我尝试连接到的OAuth服务器,这似乎不起作用

    有什么建议吗?

    你说的“这不起作用”是什么意思

    服务器没有将查询部分发回?必须在提供给oauth服务器的回调url中对状态进行编码。这可以在查询或路径部分中完成。我看不出这有什么不起作用的原因

    也许您假设您有一个单一的、通用的回调函数,它会自动用state扩展?据我们所知,情况并非如此

    编辑

    我重新阅读了谷歌实施的文档:

    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.
    
    因此(与我上面的说法相反),OAuth服务器主动地将信息(&OAuth_token=kkk)附加到您的URL。令牌应该与您从“OAuthGetRequestTOken”接收到的结果相同。这不适合你

    据我所知,现在服务器应该复制回调url中的所有内容,并添加从服务调用中收到的令牌


    您是否有OAuth服务器调用内容的日志?谁是服务提供商?我无法想象他会错过这个功能…

    在用户验证了您的请求令牌(通过输入用户名和密码)之后,您应该得到发回的oauth_令牌和oauth_验证器参数,并附加到回调中

    如果这是可行的,但是回调中没有包含您在回调中指定的其他参数,那么可能是提供者忽略了您在请求令牌步骤中发送的oauth_回调

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


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

    我看不出您想从OAuth提供商向OAuth消费者发送ID的原因。你能再解释一下你为什么要这么做吗

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

    即使OAuthProvider向您发送其内部用户id(我认为这是不必要的,也不太可能),您将如何处理它-它将与您的内部网站用户id不匹配,它与提供商网站的用户id完全不同。。。或者我不能很好地理解你的问题


    致以最诚挚的问候

    您可以为此使用状态参数,而且身份验证服务器必须仅基于访问令牌提供用户详细信息服务。

    我没有得到附加到授权url的参数。在您的回复中,您已经声明我应该在回调url中对状态进行编码。因此,我将以下内容附加到回调\u url中:request\u token=consumer.get\u request\u token(:oauth\u callback=>MY\u callback+“?id=xxx”),但是,当oauth服务器调用回调url时,我不会获取“id”作为参数。我是做错了什么,还是oauth服务器的实现不正确?我认为问题在于与oauth_回调参数一起发送的参数被忽略了。我可能错了…我认为他的第三点是不正确的-他假设在服务器将用户重定向回(回调url)后,用户将不会与他一起使用会话cookie,这就是为什么他认为他应该首先发送会话id,然后期望收到它。然而,我认为这没有意义,因为用户将通过浏览器重定向到回调url,因此他将有一个会话(消费者以前设置的会话)。这就是为什么我认为他的假设是不正确的,或者我无法理解……柳本,你是对的;我也有同样的问题。我没有意识到重定向是从他们的浏览器发生的。