2016-12-31 70 views
0

我正在構建一組Web應用程序;後端具有類似REST的API,前端將是一些REST JS應用程序,android應用程序等;我試圖想出一個SSO功能。Oauth SSO for REST應用程序

看着Oauth2/OIDC,看起來最好的方法是使用隱式流;然而,隱式流中的訪問令牌(在oidc中)有一個到期的集合。刷新標記不是隱式流的一部分。

如何確保用戶能夠保持登錄狀態?即當訪問令牌到期時,前端應用程序將嘗試從auth服務器獲取新的訪問令牌;這是應該要求用戶名/密碼。或者,它可以與前端(使用cookie)建立會話,但這與刷新令牌有什麼不同?

在我看來,獲取訪問令牌例如從android應用程序意味着至少打開網頁瀏覽器;取決於到期時間長短,這可能會經常發生。這是正確的流程還是我錯過了什麼?

回答

0

你說得對,隱式授權類型不允許發佈刷新令牌。 但是,刷新令牌和訪問令牌並不需要知道用戶是否已登錄(訪問令牌只允許您訪問受保護的資源)。您必須使用在授權響應中發佈的ID令​​牌。

您可以通過發送帶查詢參數prompt=none(請參閱部分3.1.2.1. Authentication Request)的授權請求來驗證用戶是否仍然登錄。我建議你使用id_token_hint查詢參數發送電流ID令牌在同一節中提到:

ID令牌先前由認證服務器發出的傳遞作爲對最終用戶的當前或過去的認證會話提示與客戶。如果由ID令牌標識的最終用戶登錄或由請求登錄,則授權服務器返回肯定響應;否則,它應該返回一個錯誤,如login_required。如果可能的話,當提示=無用於

如果收到錯誤(login_requiredinteraction_required),則用戶可以被登出的id_token_hint應該存在。

另一種方法是使用Session Management功能。但由於本規範尚未獲得批准(草案27),因此可能會有變更,可能無法使用。但是,這是瞭解用戶狀態的一種非常簡單的方法。