1

我們在爲使用Oauth2.0進行SSO的新Google Apps Marketplace開發應用程序時遇到了問題。Ruby on Rails上的新Google Apps Marketplace Oauth2.0實施問題

作爲我們應用程序的一部分,我們在離線模式下使用Google Calendar V3 API - 這意味着我們需要爲我們的客戶保留'refresh_token'。

爲了得到我們需要配置google_oauth2.0提供商第一的OAuth2.0身份驗證在「refresh_token」(使用omniauth - 谷歌 - 的oauth2寶石),如:

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。

但是,指定提示符''consent''屬性會導致授權彈出窗口,這會取消整個SSO想法 - 其中只有在安裝過程中會提示域管理員。

是否可以在不提示域用戶的情況下獲取refresh_token? 新的Google Apps Marketplace如何在不提示最終用戶的情況下支持離線訪問?

回答

3

它看起來像離線訪問的服務帳戶是我正在尋找。

此線程的啓發: Trouble with Google Apps API and Service Accounts in Ruby

我發現我可以創建在Apps Marketplace中配置的服務帳戶。 項目 - > API &驗證 - >證書 - >創建新的客戶端ID - >選擇服務帳戶。 在我的代碼中使用徽記,爲最終用戶提供域級別的授權:

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! 

這不僅讓我沒有在此過程中的任何階段提示最終用戶進行身份驗證 - 但我不」 t不再需要refresh_token,我可以使用域級授權執行API調用。 person選項允許我指定哪個最終用戶使用API​​調用。

+1

您是對的 - 服務帳戶是在用戶不在鍵盤時打開API調用並且不會破壞SSO的唯一方式。這是因爲通過Google Apps Marketplace安裝的應用無法請求刷新令牌。我們正在探索如何以安全的方式允許刷新令牌。 – jonathanberi

0

正如在這個問題(Google Apps Marketplace SDK + Domain-wide OAuth 2 SSO)中回答的那樣,如果您要求從您的應用程序進行脫機訪問,則在執行OAuth2.0時,域用戶總是會收到授權頁面的提示。

不過,我不認爲這否認了SSO的概念,因爲離線權限將只給予第一次用戶訪問您的應用程序。 (:「同意」參數將存儲庫有翻譯成approval_prompt:「自動」就像是OAuth2.0的登錄文件中,如果提示)給予的權限您的應用程序將不會再詢問他們後。

+0

我不完全確定這是正確的。 由於可以在這裏看到:市場文檔(https://developers.google.com/apps-marketplace/building)(下「從離線訪問Web服務器應用程序使用谷歌服務」),新的市場是假設以支持某種離線訪問。 作爲描述有很模糊,我不知道這是否回答我的情況或沒有。 我想聽聽解決這個問題的最佳方式是什麼(在新的應用程序市場中離線訪問),因爲我無法從文檔中理解它並提示用戶同意似乎是一種不好的做法。 –