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

Tov*_*vi7 24 java oauth-2.0 surveymonkey

我正在尝试创建一个与SurveyMonkey API交互的本地基于Java的客户端.

SurveyMonkey需要使用OAuth 2.0的长期访问令牌,我不是很熟悉.

我一直在谷歌搜索这几个小时,我认为答案是否定的,但我只想确定:

我是否可以编写一个与SurveyMonkey交互的简单Java客户端,而无需在某些云中设置我自己的重定向服务器

我觉得拥有自己的在线服务是必须的,以便能够接收OAuth 2.0生成的持有者令牌.是否有可能我不能让SurveyMonkey直接向我的客户发送承载令牌?

如果我要在某处设置我自己的自定义Servlet,并将其用作redirect_uri,那么正确的流程如下:

  1. 来自SurveyMonkey的Java客户端请求承载令牌,redirect_uri是我自己的自定义servlet URL.
  2. SurveyMonkey将令牌发送到我的自定义servlet URL.
  3. Java-client轮询自定义servlet URL,直到令牌可用?

它是否正确?

小智 16

不完全是,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>
Run Code Online (Sandbox Code Playgroud)

这将向用户显示一个页面,告诉他们您要求访问其帐户的哪些部分(例如,查看他们的调查,查看他们的回复等).一旦用户通过单击该页面上的"授权"批准,SurveyMonkey将自动转到您设置的任何重定向URI(确保上面的URL中的一个与您在应用程序的设置中设置的匹配)与代码.

因此,如果您的重定向网址是https://example.com/surveymonkey/oauth,则SurveyMonkey会使用以下代码将用户重定向到该网址:

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

您需要获取该代码,然后通过https://api.surveymonkey.net/oauth/token?api_key=<your_api_key>使用以下post params 执行POST请求来交换它以获取访问令牌:

client_secret=<your_secret>
code=<auth_code_you_just_got>
redirect_uri=<same_redirect_uri_as_before>
grant_type=authorization_code
Run Code Online (Sandbox Code Playgroud)

这将返回访问令牌,然后您可以使用该访问令牌访问用户帐户上的数据.您不会将访问令牌提供给您用来访问用户帐户的用户.无需投票或其他任何事情.

如果您只是访问自己的帐户,则可以使用应用设置页面中提供的访问令牌.否则,如果没有设置自己的重定向服务器,则无法为用户获取访问令牌(除非所有用户与您在同一个组中,即同一帐户下的多个用户;但我不会进入此目的).SurveyMonkey需要一个地方在用户授权后向您发送代码,您不能只请求一个.


Flo*_*lli 10

是的,可以在没有回调URL的情况下使用OAuth2.在RFC6749介绍了几种流动.该授权码补助类型需要重定向URI.但是,资源所有者密码凭据授予类型不会.

自RFC6749以来,已经发布了不需要任何重定向URI的其他规范:

  • RFC7522:OAuth 2.0客户端身份验证和授权授权的安全声明标记语言(SAML)2.0配置文件
  • RFC7523:用于OAuth 2.0客户端身份验证和授权授权的JSON Web令牌(JWT)配置文件

还有另一个IETF草案试图为有限设备引入另一种授权类型(https://tools.ietf.org/html/draft-ietf-oauth-device-flow),它不需要任何重定向URI.

在任何情况下,如果上述授权类型不符合您的需求,则不会阻止您创建自定义授权类型.