今天我們進到 CISSP 八大領域中的第五領域:識別與存取管理。先問大家一個問題,為什麼單一簽入 (Single Sign-On, SOO) 又安全又有效率?效率和安全在這裡沒有矛盾,或是需要權衡嗎?
圖片來源:https://secure.oneallcdn.com/img/services/single_sign_on/single-sign-on.png
公布我的想法,嗯,結論是整局上的安全性是比較提升的。我的論點如下:
效率自然就不在話下了,效率好處如下:
因為組織內的單一簽入是很基本的,如果您需要實作的話,可以往 Kerberos 來研究。它利用對稱性加密算法和 Tickets 來識別與查驗身份。
至於組織間的識別與存取,則可以參考 SAML,這個唉呀安總我懶得說了,直接用 CODE 說話吧。
.NET 4.5 的 Windows Identity Foundation 已內建這項功能可用,它支援了 SAML 2.0。
using System.Xml;
using System.IdentityModel.Tokens;
namespace YOUR.SPACE
{
public class Saml2Serializer : Saml2SecurityTokenHandler
{
public Saml2Serializer()
{
Configuration = new SecurityTokenHandlerConfiguration(){};
}
public void WriteSaml2Assertion(XmlWriter writer, Saml2Assertion data)
{
base.WriteAssertion(writer, data);
}
}
}
這段 CODE 會將您的斷言轉為 XML 傳出。我貼這段 CODE 的目的是,示意各位 .NET 有現成套件可用,當有客人要求您要用跨組織地使用 SAML 2.0 時,先來從這段 CODE 找方向喔。以下進入重頭戲:開放授權 2.0。
現在 OAuth 2.0 被許多大型「授權服務提供商」所使用,像是 Line、Google、Microsoft、Facebook 等。有了這個,我們就能夠用 Facebook ID 去登入其他網站了,好方便啊。
它的運作流程如下:
真的,就這麼簡單,除了中間握手握來握去那邊有一些規格要遵從,但是實作完一次就變成共用元件了,對資深工程師來講不會太難。
Web A 拿到我們的 Facebook 授權登入之後,Facebook 還可以提供 Web A 一些額外權限:
取決於用戶授權 Web A,到底能夠使用 Facebook 中多少資料,也就是要賦予 Web A 多大的權限,來存取該用戶的個資。這就是我們初次授權 Web A 時,會被問的那些問題:「您是否同意...」。
2017 年有幸進入一間精神時光屋裡修練,它叫作「爭奇鬥豔館」,這名字取得好,因為在場的各位無不使出渾身解數,爭奇、鬥豔。會場提供 Open Wi-Fi、Open API、Open Data、Open Platform,有智慧城市的未來感。
圖片來源:https://www.facebook.com/hackNTU