Oauth2 重定向到无效端口 8080
Posted
技术标签:
【中文标题】Oauth2 重定向到无效端口 8080【英文标题】:Oauth2 redirection to invalid port 8080 【发布时间】:2021-04-14 22:01:20 【问题描述】:我的要求是我需要为 Gmail 用户动态添加图像签名。
仅供参考:以下是我遵循的过程
在谷歌控制台中创建项目
通过以下方式创建 Oauth 客户端 ID
应用类型:网络
授权的 javascript 来源:http://localhost
授权重定向 URI:http://localhost:3000
下载为 client_request.json
代码如下
'''
from apiclient import discovery
from googleapiclient.discovery import build
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
from oauth2client.tools import argparser, run_flow
args = argparser.parse_args()
from oauth2client.file import Storage
SCOPES = 'https://www.googleapis.com/auth/gmail.settings.basic'
STORAGE = Storage('credentials.storage')
credentials = STORAGE.get()
creds =None
args.noauth_local_webserver = True
http = httplib2.Http()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, STORAGE,http=http)
GMAIL = discovery.build('gmail', 'v1', http=creds.authorize(Http()))
addresses = GMAIL.users().settings().sendAs().list(userId='me',
fields='sendAs(isPrimary,sendAsEmail)').execute().get('sendAs')
for address in addresses:
if address.get('isPrimary'):
break
signature = 'signature':'<img src="https://server:8000/test.png" >'
rsp = GMAIL.users().settings().sendAs().patch(userId='me',
sendAsEmail=address['sendAsEmail'], body=signature).execute()
print("Signature changed to '%s'" % rsp['signature']) '''
我遇到了两个问题:
1) 在我运行上述代码后,它会生成以下 URL
https://accounts.google.com/o/oauth2/auth?client_id=123456789123-lkhipfqkk6g224bnf7n9sfdsdfsdss.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.settings.basic&access_type=offline&response_type=code
尽管将 3000 指定为重定向端口,但它仍指向 8080
2) 我无法为每个网络请求生成唯一的动态 URL
请提出前进的方向
谢谢
【问题讨论】:
【参考方案1】:您从 redirect_uri=http://localhost:8080
发送的重定向 uri 必须与您在 google 开发者控制台中添加的重定向 uri 之一完全匹配。
错误消息会准确告诉您应用程序正在发送哪个 uri 作为其重定向 uri。你只需要添加它。
尽管将 3000 指定为重定向端口,但它仍指向 8080
您仅在 Google 开发者控制台中指定您将从 3000 发送,但您的应用程序似乎从 8080 发送。
解决方案:将 http://localhost:8080
添加到谷歌开发者控制台作为有效的重定向 uri,或者将您的应用程序更改为从您添加到谷歌开发者控制台的 http://localhost:3000
发送。
【讨论】:
在 Google 开发控制台中,我已经将“授权重定向 URI”设置为 3000,并且在代码中我也没有提到 8080。 再说一次,它是您的应用程序和您正在使用的库,它们被配置为从端口 8080 发送。您可以幽默地添加它,然后看到在使用该系统十年后,我确实知道我在说什么。然后,您可以将其保持不变,或者查看如何修复您的应用程序,使其在端口 3000 而不是 8080 上运行。您的选择真的是我只是想提供帮助。 我会做的,可以帮助我如何为每个请求生成唯一 ID 不,我建议您为此打开另一个问题,因为它与您在此问题中发布的来自 Google 的错误消息无关。 感谢@DaImTo,您的应用程序指向默认端口 8080 是正确的。下面的行进行了更改(flags = tools.argparser.parse_args(args=['--auth_host_port=3000'] )以上是关于Oauth2 重定向到无效端口 8080的主要内容,如果未能解决你的问题,请参考以下文章
出现错误:redirect_uri_mismatch 请求中的重定向 URI:http://localhost:8080/oauth2callback 与注册的重定向 URI 不匹配
Spring Security Oauth2:无效的重定向 url