我正在尝试将Google OAuth 2身份验证与我在我的计算机上运行的玩具应用程序(localhost:8080
)一起使用Social Auth用于Java。
但是,当我的应用连接到Google以对用户进行身份验证时,Google会回复此错误页面:
我的应用程序,名为"我的爱好应用程序",在开发者控制台中配置如下:
在Google OAuth 2 docs中,指定了:
redirect_uri:为此项目列出的redirect_uri值之一 在开发人员控制台中。
确定响应的发送位置。该 此参数的值必须与列出的值之一完全匹配 对于Google Developers Console中的此项目(包括http 或https计划,案例和尾随' /')。
我有几个问题:
redirect_uri
?答案 0 :(得分:33)
这实际上比你想象的要容易,不幸的是,我花了几个小时来弄明白。
通常情况下,当您在Google或其他地方添加多个链接时,请将其分隔为,
或;
,但使用重定向URI时,您必须使用新行,这实际上并不十分直观。因此,当您按下Edit Settings
按钮时,如果您有更多链接,则可以添加到URI和/或Origins中,以换行符(enter
)分隔。
无需复杂的应用配置或新密钥。
关于第二个问题:您必须转到“同意屏幕”标签,更改您的应用信息,例如PRODUCT NAME
,HOMEPAGE
,LOGO
等。
答案 1 :(得分:4)
这个答案可能不是问题的准确答案,但我认为这可能会帮助那些第一次使用Google OAuth并且想知道为什么他们的多个URI无法被识别的人。
我们在代码中的2个位置使用重定向URI。第一次,在获取auth代码时,第二次,在交换此代码时访问令牌。
在Google docs中,明确提到auth代码请求(第一个请求)的响应将被发送到重定向URI。因此,如果您从端点A发出请求并将rediredt URI指定为端点B,那么Google会将身份验证代码发送到端点B.这很明显且工作正常,没有任何错误。
来到第二个请求,文档有些含糊不清。 redirect_URI参数描述如下:
redirect_uri:您在API控制台中指定的URI,如上所述 在设置重定向URI。
这是我理解其工作原理的错误。按照与第一次调用类似的方法,我使用第三个端点C并在进行第二次调用时在redirect_URI参数中传递此端点C.虽然我的端点B和C是在API控制台中指定的,但我得到了URI不匹配错误。
问题在于,与第一次调用的情况不同,对第二次调用的响应来自发出请求的同一端点。我在下面的python中提出了一个请求:
r = requests.post(token_endpoint, params)
r
对令牌有响应。
我的URI不匹配,因为我应该在两个调用中使用相同的redirect_URI。
因此,对于单个OAuth请求,我们需要使用单个redirect_URI。
然而,这提出了一个问题,为什么在单个应用的API控制台中允许多个redirect_URI。我假设如果我们需要在同一个应用程序中进行多对authCode-token调用,我们有使用多个redirect_URI的余地。