搜索

首页  >  问答  >  正文

能否在没有重定向服务器的情况下使用OAuth 2.0?

<p>我正在尝试创建一个基于Java的本地客户端,与SurveyMonkey API进行交互。</p> <p>SurveyMonkey要求使用OAuth 2.0生成一个长期有效的访问令牌,这是我不太熟悉的。</p> <p>我已经在Google上搜索了几个小时,我认为答案是否定的,但我只是想确保一下:</p> <p>我是否可以编写一个简单的Java客户端与SurveyMonkey进行交互,<strong>而无需在某个云端设置自己的重定向服务器</strong>?</p> <p>我觉得拥有自己的在线服务是必要的,才能够接收由OAuth 2.0生成的令牌。难道我不能让SurveyMonkey直接将令牌发送给我的客户端吗?</p> <p>如果我在某个地方设置了自己的自定义Servlet,并将其用作redirect_uri,那么正确的流程应该如下:</p> <ol> <li>Java客户端向SurveyMonkey请求令牌,其中redirect_uri是我的自定义Servlet的URL。</li> <li>SurveyMonkey将令牌发送到我的自定义Servlet的URL。</li> <li>Java客户端轮询自定义Servlet的URL,直到获得令牌。</li> </ol> <p>这样正确吗?</p>
P粉710478990P粉710478990493 天前699

全部回复(2)我来回复

  • P粉949190972

    P粉9491909722023-08-23 18:29:31

    是的,可以在没有回调URL的情况下使用OAuth2。 RFC6749介绍了几种流程。隐式流程(现已弃用[1])和授权码流程(Authorization Code)需要重定向URI。然而,资源所有者密码凭证流程(也已弃用[1])不需要。

    自RFC6749发布以来,还发布了其他规范,这些规范不需要任何重定向URI:

    此外,使用OpenID Connect时,响应模式不一定是重定向到redirect_uri参数,而可以是对该端点的POST请求。有关详细信息,请参阅OAuth 2.0表单POST响应模式规范。

    无论如何,如果上述授权类型不适合您的需求,您可以创建一个自定义授权类型


    [1]:OAuth 2.1规范(草案07)

    回复
    0
  • P粉713866425

    P粉7138664252023-08-23 16:15:15

    并不完全准确,OAuth流程的整个重点在于用户(你代表其访问数据的客户端)需要给予你访问他们数据的权限。

    请参阅身份验证说明。你需要将用户发送到OAuth授权页面:

    https://api.surveymonkey.net/oauth/authorize?api_key<your_key>&client_id=<your_client_id>&response_type=code&redirect_uri=<your_redirect_uri>

    这将向用户显示一个页面,告诉他们你正在请求访问他们账户的哪些部分(例如查看他们的调查、查看他们的回答等)。一旦用户通过在该页面上点击“授权”来批准,SurveyMonkey将自动跳转到你设置为重定向URI的页面(确保上述URL中的重定向URI与你应用程序设置中设置的相匹配)并返回授权码。

    因此,如果你的重定向URL是https://example.com/surveymonkey/oauth,SurveyMonkey将使用授权码将用户重定向到该URL:

    https://example.com/surveymonkey/oauth?code=<auth_code>

    然后,你需要使用该授权码通过向https://api.surveymonkey.net/oauth/token?api_key=<your_api_key>发送POST请求来交换访问令牌,并提供以下POST参数:

    client_secret=<your_secret>
    code=<auth_code_you_just_got>
    redirect_uri=<same_redirect_uri_as_before>
    grant_type=authorization_code

    这将返回一个访问令牌,然后你可以使用该访问令牌来访问用户账户上的数据。你不需要将访问令牌提供给用户,它是供你使用以访问用户账户的。无需轮询或其他操作。

    如果你只是访问自己的账户,可以使用应用程序设置页面提供的访问令牌。否则,除非设置自己的重定向服务器,否则无法为用户获取访问令牌(除非所有用户都属于同一组,即同一账户下的多个用户;但我不会深入讨论这个)。SurveyMonkey需要一个地方来发送授权码给你,你不能只是请求一个。

    回复
    0
  • 取消回复