2015-06-02 43 views
0

我有一個網站,mywebsite.com,其中用戶可以登錄登錄被重定向未經驗證的進程到SSO提供對ssologin.com處理,驗證憑證和然後使用訪問令牌重定向到mywebsite.com,以便它可以創建本地會話。使用3比例與共享OAuth授權服務器

該網站是一個使用JavaScript調用通過API網關3scale公開的API的單頁網絡應用程序。

我想知道的是我如何獲得3scale來兌現發給網站的OAuth訪問令牌。我猜它應該很簡單,因爲3scale似乎把它委託給一個授權URL,但我不確定這背後的機制以及它是否在做我期望的。

任何人都可以解釋是否 - 以及如何 - 我可以做到這一點?我已閱讀文檔,但我無法理解它,因爲它會掩蓋授予OAuth訪問令牌後會發生的情況,並且它不涉及可能無法創建令牌的場景,樂隊(即在3scale的視線之外)。

我想我想在這種情況下使用的流程是客戶端Web應用程序/隱式授權流程,但請糾正我,如果我錯了。

我試圖破譯幫助文件,但我仍然有一大堆的問題:

  • 我以爲我配置3比例的OAuth登錄網址正是mywebsite.com重定向到相同的URL?或者我需要一個不同的頁面來處理不同的邏輯,並且API調用通常不是交互式/面向用戶的事實?
  • 訪問令牌是在用戶通過ssologin.com OAuth登錄頁面登錄到網站後用於後續API調用返回的,還是3scale需要自己的令牌,因此需要自己的登錄重定向? (是否有狀態存儲在網關中的任何位置?)
  • 訪問令牌如何傳遞給API調用:作爲參數,作爲HTTP標頭還是通過其他某種機制?

其實我想要做的是實際上使用OpenID Connect並獲取ID令牌,但3scale本身不支持這一點。有沒有什麼我可以用3scale做到這一點,並仍然返回一個ID令牌,有效地使其行爲像OpenID連接?

回答

4

TL; DR:使用3比例API調用存儲access_tokens所以他們將通過3比例兌現:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2

curl -X POST "http://su1.3scale.net/services/<SERVICE_ID>/oauth_access_tokens.xml?provider_key=<PROVIDER_KEY>&app_id=<CLIENT_ID>&token=<TOKEN>&ttl=<TTL>"

3比例提供了大量的API調用來管理訪問令牌,這包括存儲爲以及刪除訪問令牌。 你可以找到一個列表,這些API調用來管理README這裏訪問令牌:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2

因此,你應該能夠3比例之外發出的訪問令牌的應用程序相關聯(可能是你的單頁Web應用程序)並將該訪問令牌用於授權目的。事實上,3scale不會生成訪問令牌,API網關會這樣做。

這是爲了檢查使用給定訪問令牌的3scale中的應用程序被授權調用給定的API端點i的目的。e授權,而不是認證和/或身份驗證。當用戶登錄時,用戶認證應全部在3scale以外完成。

3scale根據您要實施的流程以及是否希望生成令牌,爲API網關提供了許多配置模板通過API網關(令牌生成文件夾)或外部OAuth提供程序(無代幣生成文件夾)。您可以在這裏找到這些模板,並解釋了它們如何在每個不同的流文件夾中工作:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2。由於您有自己的OAuth提供程序來生成訪問令牌,因此您需要使用這些模板,而不是使用3scale中的集成頁面內生成的文件。

爲了回答您的具體問題:

  • 要OAuth登錄網址確實應該是一個頁面(保護ssologin頁後面),讓您的用戶授權/拒絕通過訪問其資源的應用程序訪問API。看起來你的SSO提供者不需要這個,所以它似乎跟隨資源所有者密碼流。

  • 在此流程(資源所有者密碼)中,調用API網關上的/ oauth/token端點時會返回訪問令牌。然後,網關將調用外部OAuth提供者的訪問令牌端點(使用相關參數),一旦它接收到訪問令牌,它將以3scale存儲它並將其返回給調用應用程序。與其他流程相反,它將由API網關發送到重定向網址。從您的應用程序

    1. 調用3比例端點存儲訪問令牌回來,直接
    2. 充分利用: 但是,如果您的SSO提供商已經返回一個訪問令牌到應用程序的重定向URL,你可以做兩件事情SSO提供程序的redirect_url是API網關,而不是您的應用程序,以便它將訪問令牌存儲在3scale中,並將access_token也發送回您的應用程序。這將需要自定義API網關配置模板。
  • 完全取決於你在哪裏發送訪問令牌。但是,您必須在Nginx配置模板中配置此位置,以便正確提取訪問令牌。 e.g https://github.com/3scale/nginx-oauth-templates/blob/master/oauth2/resource-owner-password-flow/no-token-generation/nginx.lua#L198-L207https://github.com/3scale/nginx-oauth-templates/blob/master/oauth2/resource-owner-password-flow/no-token-generation/nginx.lua#L312

最終,網關可以將您的應用程序和訪問令牌發行人捕捉和存儲這些在3比例,調解整個交換之間坐。 3scale中唯一的限制是訪問令牌格式必須是長達256個字符的字母數字字符串。

+0

非常感謝您的全面回答。我認爲我錯過了一件重要的事情,那就是我期望使用雲API網關,而不是內部部署,但是從更多閱讀來看,您只能在自己的nginx服務器(或同等產品)上使用OAuth。我喜歡使用API​​來存儲和刪除令牌,但需要確保SSO註銷包括清除令牌。 – ChrisC

+0

其實我正在重新思考這個架構......我所看到的SSO提供者實際上提供了對web和API的保護,所以也是一種網關,但是它缺少大部分其他API網關功能API密鑰,管理,度量標準等。我在協調基於雲計算的API網關時遇到了問題,但現在我正在考慮將SSO網關放在API網關(3比例nginx)之前,繞過3scale用於用戶authn/authz完全。這實際上是相當乾淨的責任分離這種方式......思考? – ChrisC