是否可以使用Google OAuth2在浏览器窗口中打开“redirect_url”?

时间:2017-03-05 20:33:23

标签: google-api oauth-2.0 google-oauth

我正在编写一个需要使用OAuth2 Protocol进行身份验证的应用程序。我已经设法使用Web Server App authentication mechanism并且它工作得很好,唯一的问题是我在程序本身内处理redirect_url并且我不希望浏览器以新的方式发出请求标签

如果可能,理想的解决方案是谷歌服务器会直接向我发送请求,或者它会打开和关闭浏览器标签/窗口。

也许这种方法不是最合适的,如果是这样,请让我知道如何做得更好。

3 个答案:

答案 0 :(得分:2)

公平警告,没有像这样使用oAuth,但我确实有一个想法:

您是否只能在window.open()的弹出窗口中打开oauth请求? 然后使用window.opener获取弹出窗口的父级。

OAuth验证后,您可以使用以下内容刷新父级: window.opener.location.reload();

然后您可以使用window.close()关闭弹出窗口。

这样就不会打开任何新标签页,您的应用程序仍然是活动标签页。

答案 1 :(得分:0)

是的,我可能正在使用网络浏览器控件在我的.Net应用程序中这样做。您已标记此Google Oauth,因此我假设您正在使用Googles auth服务器执行此操作。我怀疑你正在使用一个谷歌客户端库,默认情况下,它是在新的浏览器窗口中打开它构建的。例如,Google .Net客户端库就是为此而设计的。

技巧可能要求您使用不需要重定向URI的本机或其他类型凭据,而不是使用Web凭据。这些凭据通常用于已安装的应用程序,但它们可用于Web。有可能使用Web凭据进行此操作,但我认为它将依赖于您正在做的事情。

Google Oauth2流程:

流程的第一步是创建用户进行身份验证的URL。这是一个网页,你无法改变它。因此,您的应用程序需要能够向用户显示网页。

https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code  

通过提供urn:ietf:wg:oauth:2.0:oob你基本上告诉auth服务器只是将代码返回到你发送它的地方。

代码将返回给您,您需要交换它。此调用是HTTP POST。

https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code

回复

{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}

现在你有一个刷新toke和一个访问令牌。您可以使用另一个HTTP POst调用刷新访问令牌。

https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

响应

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}

因此,只要您可以将auth URL嵌入到您的应用程序中,您就可以自己获取它。您不需要重定向URI。我的google 3 legged oauth2

教程

答案 2 :(得分:-1)

由于您已经在使用非可移植的xdg-open,您可能可以使用其他外部工具(xdotool)并使用它模拟用户击键:

xdotool search --onlyvisible --class "Chrome" windowfocus key 'ctrl+w'

这会将ctrl+w(关闭标签)发送到可见的Chrome实例

请记住,可能会打开多个浏览器窗口。