首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails上新的Google应用程序市场Oauth2.0实现问题

Rails上新的Google应用程序市场Oauth2.0实现问题
EN

Stack Overflow用户
提问于 2014-01-19 19:06:16
回答 2查看 647关注 0票数 1

在为新的Google市场开发应用程序时,我们遇到了一个问题,该应用程序使用Oauth2.0forSSO。

作为应用程序的一部分,我们在离线模式下使用Google V3 API --这意味着我们需要为客户端保留一个V3。

为了在第一次OAuth2.0身份验证期间获得“refresh_token”,我们需要配置google_oauth2.0提供者(使用oauth2 Google-OAuth2GEM),例如:

代码语言:javascript
运行
复制
Rails.application.config.middleware.use OmniAuth::Builder do
    provider :google_oauth2, CONFIG[:app_id], CONFIG[:app_secret], {
    access_type: 'offline',
    prompt: 'consent' }
 end

如果不指定access_type:‘脱机’和提示:‘同意’,我们将无法接收到refresh_token,并且无法正确使用日历API。

但是,指定提示符:“同意”属性会导致一个授权弹出,这否定了整个SSO的想法--在安装过程中,只有域管理员才会得到提示。

是否可以在不提示域用户的情况下获得refresh_token?新的谷歌应用程序市场如何支持离线访问而不提示终端用户?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 17:32:47

它看起来像一个服务帐户的离线访问是我要找的。

受这个线程的启发:Trouble with Google Apps API and Service Accounts in Ruby

我发现我可以在应用程序市场配置上创建一个服务帐户。项目-> API& Auth ->凭据->创建新客户端Id ->选择服务帐户。在我的代码中,使用Signet为最终用户提供域级授权:

代码语言:javascript
运行
复制
key = Google::APIClient::PKCS12.load_key('privatekey.p12', 'notasecret')
client = Google::APIClient.new

client.authorization = Signet::OAuth2::Client.new(
        :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
        :audience => 'https://accounts.google.com/o/oauth2/token',
        :scope => 'https://www.googleapis.com/auth/calendar',
        :issuer => '<email-address-of-service-account>@developer.gserviceaccount.com',
        :signing_key => key,
        :person => email)
client.authorization.fetch_access_token!

这不仅允许我在不提示最终用户的情况下进行身份验证--在过程中的任何阶段--而且我不再需要refresh_token,而且我可以使用域级授权来执行API调用。person选项允许我指定使用API调用的最终用户。

票数 3
EN

Stack Overflow用户

发布于 2014-01-20 12:12:39

正如在这个问题( Google Apps Marketplace SDK + Domain-wide OAuth 2 SSO )中回答的那样,如果您请求从应用程序中离线访问,则在执行OAuth2.0时始终会提示域用户使用授权页。

但是,我认为这并不否认SSO的概念,因为离线权限只会在用户第一次访问您的应用程序时才会被授予。在授予权限之后,您的应用程序将不再请求它们(如果库中的提示:“同意”参数被转换为批准_提示符:‘auto’,就像在OAuth2.0登录文档中那样)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21221244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档