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

apache永久重定向所有请求到另一个端口

coinbase oauth2 重定向 uri

Spring oauth2 插入井号而不是 ?在使用令牌重定向到资源服务器时

spring security 重定向登录时端口 8080 来自哪里?如何将其更改为使用端口 443?