聯邦式 OAuth 構想

剛剛在架 wallabag ,開源的 Pocket / Instapaper 替代品。

然後突然想到,我架一個這個就只有自己用、自己維護耶,而且又是另外一組帳號密碼。

不知道有沒有辦法設計一套聯邦式的 OAuth 認證機制,不同的組織(網域)可以加入聯邦,所有人使用同一個 OAuth endpoint 但帳號的後綴不同,這樣志願的服務供應者(譬如說我很樂意讓別人一起使用我維護的 Wallabag)就可以直接選用這個 OAuth 認證服務,再選擇要讓哪一些組織的人登入。

這樣的話,既能達到單一帳號的功能(在不同服務間可以使用同一帳號,不用記多組帳號密碼),也不像直接採用 Google OAuth 這種任何人都可以擁有帳號的服務,志願的服務供應者就可以只允許他信任的組織的使用者使用他的服務。

可能有點難理解,舉個例子說明:

姑且把這個中央代理 OAuth 服務叫做 Distauth,接下來有志願的服務供應者 A, B 和組織 X, Y, Z,還有組織 X, Y, Z 的成員甲、乙、丙。

A 因為自己的需求,架了一個 Nextcloud ,他願意分享一些伺服器空間給其他人使用,但是又怕有人濫用。

B 為了要自己作筆記,架了一個 hackmd ,他也願意讓其他人使用他維護的 hackmd 服務。

X 組織是某個資訊社群,他們擁有一個 xxxx.tw 的網域,也有一套自己的帳號系統,要申請 xxxx.tw 的帳號需要經過組織訂定的審查流程,並簽署不濫用的同意書,甲已經通過,因此有 jia@xxxx.tw 這個帳號。

Y 組織是另一個鬆散的社群,他們提供所有成員一個帳號,只要填一個線上表單就可以申請,乙擁有 yee@yyyy.tw 這個帳號。

Z 組織是一間大學,所有的在校生都有帳號,帳號會在畢業之後失效,丙擁有 bing@zzzz.tw 這個帳號。

X, Y, Z 都加入了 Distauth 聯盟。

Distauth 是一個特殊的 OAuth 認證伺服器 (Authorization Server) ,任何組織(只要有一套帳號系統)都可以加入 Distauth , 任何服務供應者、應用程式都可以和 Distauth 註冊,成為 OAuth client (application) ,取得獨特的 App ID 和 App Secret 。

A 因為伺服器空間有限,而且他想要確保來使用的人不會濫用他提供的服務,他認為 X 的審查流程足夠嚴格,Y, Z 則不,所以他在 Distauth 取得 App ID 和 Secret 的時候就設定,只有組織 X 的人可以登入。

如此一來,甲已經擁有了 X 的帳號,所以他可以直接使用 A 提供的 Nextcloud 服務,X 組織未來任何的新成員也都可以直接使用 A 的 Nextcloud ;同時,乙和丙雖然可以成功登入 Distauth ,但 Distauth 不會授權乙丙使用 A 的 Nextcloud 。

B 架設的 hackmd ,因為只有純文字儲存功能,所以佔用資源很少,他認為不需要嚴謹限制使用者,但還是希望是認識的社群的成員才能使用,所以他在 Distauth 設定 X, Y, Z 的成員都可以使用,但其他組織不行。

整個概念大概就是這樣,現在看來好像沒有類似的東西,自認這構想還不錯,不過一樣,要獲得廣泛採用本來就很困難 :-p

發表留言