能否在没有重定向服务器的情况下使用OAuth 2.0?
P粉710478990
P粉710478990 2023-08-22 22:18:09
0
2
385
<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粉710478990
P粉710478990

全部回复(1)
P粉949190972

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

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

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

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


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

P粉713866425

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

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

https://api.surveymonkey.net/oauth/authorize?api_key&client_id=&response_type=code&redirect_uri=

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

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

https://example.com/surveymonkey/oauth?code=

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

client_secret=
code=
redirect_uri=
grant_type=authorization_code

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!