我无法理解重定向uri的正确用途。在谷歌教程之后,javascript API允许我获得一个不带任何重定向URI的authorizationCode。
然后我将此代码发送到我的服务器并尝试使用此代码调用/ token端点。但是它会返回“重定向URI不匹配”,这可能意味着我需要为此端点定义与使用javascript API相同的redirect_uri。我唯一的问题是我没有在我的网站上指定任何内容。
任何人都知道如何正确使用它们?
我想要实现的流程如下: - Javascript网站要求用户许可,获取授权码 - 代码被发送到我的服务器 - 服务器使用此代码接收访问/刷新令牌并安全存储
答案 0 :(得分:0)
重定向uri的目的是告诉身份验证服务器返回身份验证代码的位置。
已安装的应用
如果我有一个安装的应用程序Windows,例如它知道只是将它返回到它来自的同一个地方。
https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code
上面的链接将向用户显示一个auth窗口,它返回的验证码将被发送回请求来自的确切位置。
网络应用
对于Web应用程序。请求的来源是什么?它的客户端pc?这只是运行Web应用程序的Web浏览器。客户端无法处理您的Web服务器必须在其上具有可以处理身份验证代码的文件的身份验证代码。
添加http://webapplication120170125114757.azurewebsites.net/authorize/
的重定向uri告诉身份验证服务器将身份验证代码返回到您的网站,以便处理它。
重定向URI不匹配
匹配小姐意味着您在上面的链接中放置的重定向uri不是您在Google开发者控制台中注册的重定向。它必须完全匹配包括任何端口号。
Js Origin
如果您正在使用JavaScript客户端,则需要为Google设置有效的JavaScript来源以授权您。
如果您使用的是3段式OAuth 2.0流,则授权重定向URI是他们将作为回调调用的端点。 https://developers.google.com/accounts/docs/OAuth2#webserver
答案 1 :(得分:0)
"我想要实现的流程如下: - Javascript网站要求用户获得权限,获取授权代码 - 代码发送到我的服务器 - 服务器使用此代码接收访问/刷新令牌并存储它安全"
这无法完成。 Google不会向JavaScript客户端发出验证码。这样做将是一个重大的安全问题。您需要编写服务器代码以请求离线访问,这将为您提供您正在寻找的身份验证代码和刷新令牌。
您的应用仍然可以是JavaScript SPA(如果这是您的目标),但您需要从应用服务器(Java,PHP等)提供应用)处理身份验证的离线方面。
作为替代方案,您可以在JavaScript中完成所有操作,但您不会拥有刷新令牌。如果你的应用程序只是JS,那不应该是一个问题,并且对用户是透明的。 gapi库根据需要处理获取访问令牌。
答案 2 :(得分:-1)
请将您的javascript来源传递给" redirect_uri"交换代码时的参数。这应该有用。