【发布时间】:2014-09-16 18:06:46
【问题描述】:
我有一个用 PHP 为谷歌市场开发的应用程序。尽管用户在域上安装了该应用程序,但它运行良好,当来自谷歌默认导航按钮时,它仍然要求访问联系人、驱动器等的权限。
根据谷歌的说法,在域上安装应用程序时应该是自动的,并且不应提示用户提供更多权限。使用新的 SDK 和 oauth 2.0 实现这一点的正确方法是什么?
最好的问候, 若昂·加林
【问题讨论】:
我有一个用 PHP 为谷歌市场开发的应用程序。尽管用户在域上安装了该应用程序,但它运行良好,当来自谷歌默认导航按钮时,它仍然要求访问联系人、驱动器等的权限。
根据谷歌的说法,在域上安装应用程序时应该是自动的,并且不应提示用户提供更多权限。使用新的 SDK 和 oauth 2.0 实现这一点的正确方法是什么?
最好的问候, 若昂·加林
【问题讨论】:
看看这篇文章 - SSO with Oauth2.0 for Enterprice Google App (OpenId to Oauth2.0 migration)
那个是面向 Python 的,但应该在 PHP 上使用类似的想法。
【讨论】:
将所有范围放入 admin sdk 中,当用户被重定向到您的网址“http://www.example.com/?domain=somedomain.com”时,只需将用户再次重定向到谷歌,仅使用 scope="email+profile", "include_granted_scopes=true" 使其包含所有您在 admin sdk 中定义的范围,并尽量避免在请求中使用 https://www.googleapis.com/auth/plus.login 范围,因为它会导致确认弹出每个用户访问用户圈子的权限,并破坏无缝域范围的 sso。
这是 vb.net 中的一个示例:
sub page_load
Dim loginUrl = "https://accounts.google.com/o/oauth2/auth?scope=" & _
"email+profile&" & _
"state=" & xState & "&" & _
"redirect_uri=" & GoogleApiCredentialHelper.RedirectUri & "&" & _
"response_type=code&" & _
"client_id=" & GoogleApiCredentialHelper.ClientId & "&" & _
"access_type=offline&" & _
"approval_prompt=auto&" & _
"include_granted_scopes=true"
response.redirect(loginUrl)
end sub
【讨论】: