当前位置: 首页 > 知识库问答 >
问题:

Ruby on Rails上新的Google Apps Marketplace Oauth2.0实现问题

昌和悦
2023-03-14

我们在使用Oauth2.0为SSO开发新的Google Apps Marketplace应用程序的过程中遇到了一个问题。

作为我们应用程序的一部分,我们在离线模式下使用谷歌日历V3应用编程接口——这意味着我们需要为客户保留“refresh_token”。

为了在第一次OAuth2.0身份验证期间获得“刷新令牌”,我们需要配置google_oauth2.0提供程序(使用omniauth-google-oauth2 gem),例如:

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: 'offline '和prompt:'consent '我们将不会收到refresh_token,并且无法正确使用日历API。

但是,指定提示:“同意”属性会导致授权弹出窗口,从而否定整个 SSO 想法 - 在安装过程中只有域管理员会收到提示。

是否可以在不提示域用户的情况下获取refresh_token?新的Google Apps Marketplace如何在不提示最终用户的情况下支持离线访问?

共有2个答案

令狐翰
2023-03-14

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

然而,我不认为这否定了单点登录的概念,因为离线权限只会在用户第一次访问你的应用时授予。授予权限后,你的应用程序不会再次请求权限(如果库中的prompt:“同意”参数转化为approval _ prompt:“auto”,就像OAuth2.0登录文档中一样)。

许阿苏
2023-03-14

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

受此线程启发:Ruby中Google Apps API和服务帐户的问题

我发现我可以在应用程序市场配置上创建服务帐户。项目-

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 调用。人员选项允许我指定我正在使用 API 调用的最终用户。

 类似资料:
  • 我从来没有用过红宝石,我想我应该试一试。安装似乎进行得很顺利(我想)。在我使用创建服务器后,麻烦就开始了,然后去设置路由,这样新项目就会出现,而不是红宝石欢迎屏幕。它产生的误差是 未初始化常量欢迎控制器 我在route controller中设置了路径,如下所示 我漏了一步吗?我正在使用installrails的说明在Windows7上安装rails。通用域名格式 这是请求的完整跟踪

  • 本文向大家介绍解决jquery实现的radio重新选中的问题,包括了解决jquery实现的radio重新选中的问题的使用技巧和注意事项,需要的朋友参考一下 (说明:使用的jquery 版本是 1.10.2。) 使用 jquery 的removeAttr(),清除掉 radio 的checked属性后。使用 attr('checked',true)可以给对应的radio 附上 checked属性。但

  • 我正在设计一个使用WordPress的网站,我在本地托管它与MAMP(Mac)。昨天我使用5.1版本的MAMP,今天我已经实现了它的5.2。 我将图像文件保存在wp content/themes/(mythmename)/images/中,以便以后在WordPress仪表板中编辑html时使用它们。但是它不再发现新的图像文件(在MAMP实现之后)。 我可以看到,在实现之后,我在应用程序中有两个MA

  • 我得到了这个错误,我知道它的意思 DL已弃用,请使用Fiddle DL已被弃用,请使用Fiddle获取源索引从 rubygems.org/由于错误(2/3)而重试源获取: Bundler::Fetcher::CertificateFailureER ror无法验证<--的SSL 证书plhd--3/>您可能遇到中间人攻击,但最有可能的是您的系统没有验证所需的CA证书。有关 OpenSSL证书的信息

  • 本文向大家介绍Codeigniter里的无刷新上传的实现代码,包括了Codeigniter里的无刷新上传的实现代码的使用技巧和注意事项,需要的朋友参考一下 好久没有更新了,写点吧算是翻译吧,纯原创没空啊XD Codeigniter还是很好用的,淡水一直很推崇。说是codeigniter里的无刷新上传吧,fashion 一点的说法就是利用AJAX技术上传。其中用到了Jquery和 AjaxFileU

  • 我正在尝试在Android系统中实现拉刷新功能。为此,我最终使用了支持库中的SwipeRefresLayout。但它并没有像我想的那样工作。 我需要在片段中实现它。这是fragment_home的代码。xml 这是放置在缅因州ctivity.java内部的碎片 但这给出了一个错误,就像它无法找到SwipeRefresh布局的类一样。你能建议我如何在这里实施吗??