在本地主机上使用 Google OAuth
我开始将 OAuth 与 Python 和 Django 结合使用。我需要它用于 Google API。我在本地主机上工作,所以我无法注册 url 回调的域。我读过有关 Google OAuth 可以与匿名域一起使用的信息。找不到,如何以及在哪里可以做到这一点?
编辑:
我有这样的观点:
def authentication(request):
CONSUMER_KEY = 'xxxxx'
CONSUMER_SECRET = 'xxxxx'
SCOPES = ['https://docs.google.com/feeds/', ]
client = gdata.docs.client.DocsClient(source='apiapp')
oauth_callback_url = 'http://%s/get_access_token' % request.META.get('HTTP_HOST')
request_token = client.GetOAuthToken(
SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
domain = '127.0.0.1:8000'
return HttpResponseRedirect(
request_token.generate_authorization_url(google_apps_domain=domain))
和这个错误:
抱歉,您访问的域的登录页面未使用 Google Apps。请检查网址并重试。
通过 https://code.google.com/apis/console/ 注册
编辑:
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
SCOPES = ['https://docs.google.com/feeds/', ]
DOMAIN = 'localhost:8000'
def authentication(request):
client = gdata.docs.client.DocsClient(source='apiapp')
oauth_callback_url = 'http://%s/get_access_token' % DOMAIN
request_token = client.GetOAuthToken(SCOPES,
oauth_callback_url,
CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET)
return HttpResponseRedirect(
request_token.generate_authorization_url())
def verify(request):
client = gdata.docs.client.DocsClient(source='apiapp')
f = open('/home/i159/.ssh/id_rsa')
RSA_KEY = f.read()
f.close()
oauth_callback_url = 'http://%s/get_access_token' % DOMAIN
request_token = client.GetOAuthToken(SCOPES,
oauth_callback_url,
CONSUMER_KEY,
rsa_private_key=RSA_KEY)
return HttpResponseRedirect(
request_token.generate_authorization_url(google_apps_domain=DOMAIN))
错误:
无法获取 OAuth 请求令牌:400,消费者没有证书:xxxxxxxxxxxxxxx.apps.googleusercontent.com
I started to use OAuth with Python and Django. I need it for Google APIs. I working on localhost, so I can't register a domain for url-callback. I've read about that Google OAuth could be used with anonymous domain. Can't find, how and where I can do that?
Edit:
I have this view:
def authentication(request):
CONSUMER_KEY = 'xxxxx'
CONSUMER_SECRET = 'xxxxx'
SCOPES = ['https://docs.google.com/feeds/', ]
client = gdata.docs.client.DocsClient(source='apiapp')
oauth_callback_url = 'http://%s/get_access_token' % request.META.get('HTTP_HOST')
request_token = client.GetOAuthToken(
SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
domain = '127.0.0.1:8000'
return HttpResponseRedirect(
request_token.generate_authorization_url(google_apps_domain=domain))
And this error:
Sorry, you've reached a login page for a domain that isn't using Google Apps. Please check the web address and try again.
Registered via https://code.google.com/apis/console/
Edit:
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
SCOPES = ['https://docs.google.com/feeds/', ]
DOMAIN = 'localhost:8000'
def authentication(request):
client = gdata.docs.client.DocsClient(source='apiapp')
oauth_callback_url = 'http://%s/get_access_token' % DOMAIN
request_token = client.GetOAuthToken(SCOPES,
oauth_callback_url,
CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET)
return HttpResponseRedirect(
request_token.generate_authorization_url())
def verify(request):
client = gdata.docs.client.DocsClient(source='apiapp')
f = open('/home/i159/.ssh/id_rsa')
RSA_KEY = f.read()
f.close()
oauth_callback_url = 'http://%s/get_access_token' % DOMAIN
request_token = client.GetOAuthToken(SCOPES,
oauth_callback_url,
CONSUMER_KEY,
rsa_private_key=RSA_KEY)
return HttpResponseRedirect(
request_token.generate_authorization_url(google_apps_domain=DOMAIN))
The error:
Unable to obtain OAuth request token: 400, Consumer does not have a cert: xxxxxxxxxxxxxxx.apps.googleusercontent.com
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
需要明确的是,您可以在 OAuth 1.0 或 OAuth 2.0 上进行开发时将 Web 应用程序流与 localhost 结合使用。 OAuth 2.0 应该是首选,因为它是我们关注的机制。 OAuth 2.0 的用户体验将大大改善。
没有什么可以阻止您使用 localhost 作为回调 URL。我自己也经常这样做。您只需确保回调 URL 完全匹配,包括任何端口号,但由于显而易见的原因,您无法以这种方式部署应用程序。安装的应用程序更加复杂,但如果您使用 Django 做某事,则可以利用 OAuth 2.0 是不记名令牌系统这一事实。只要您将刷新令牌保留在服务器端,您就可以使用自己的应用程序进行带外身份验证,然后将不记名令牌发送到已安装的应用程序。您安装的应用程序将有大约一小时的时间段用于拨打电话,然后您需要重复该过程。在大多数情况下,这对用户来说是透明的。不记名令牌的传输应通过加密通道进行。
Just to be clear, you can use the web application flow with localhost while developing on either OAuth 1.0 or OAuth 2.0. OAuth 2.0 should be preferred as it's the mechanism we are focussed on. The user experience for OAuth 2.0 is going to be substantially better.
There's nothing stopping you from using localhost as your callback URL. I do this myself all the time. You just need to make sure the callback URL matches exactly, including any port numbers, and you can't deploy your application that way for obvious reasons. Installed applications are more complicated, but if you're doing something with Django, it's possible to take advantage of the fact that OAuth 2.0 is a bearer-token system. As long as you're keeping the refresh token server-side, you can authenticate with your own application out-of-band and then send the bearer token to the installed application. Your installed application will have roughly a one-hour window in which to make calls before you'll need to repeat the process. This can happen transparently to the user in most cases. Transmission of the bearer token should happen over an encrypted channel.
适用于已安装应用的 OAuth 1.0
除此之外,您可能不想在示例代码中包含实际的
CONSUMER_KEY
和CONSUMER_SECRET
。OAuth 1.0 for Installed Applications
Besides that, you probably don't want to include your actual
CONSUMER_KEY
andCONSUMER_SECRET
in the example code.尝试不带参数的代码:
Try your code without arguments: