- OpenID 和 OAuth 的區別
- IdentityServer4,NET Core下的安全框架
- 客戶端模式(Client Credentials)
- 密碼模式(resource owner password credentials)
- 簡化模式(implicit flow)
- 授權碼模式(Authorization code flow)
- 混合模式(Hybrid Flow)
OpenID 和 OAuth 的區別
- OpenID:Authentication,即認證,用戶是誰?
- OAuth:Authorization,即授權,用戶能做哪些操作?
- OpenID Connect(OIDC):基於OAuth協議,是“認證”和“授權”的結合。
OAuth2提供了Access Token來解決授權第三方客戶端訪問受保護資源的問題。 OIDC在這個基礎上提供了ID Token來解決第三方客戶端標識用戶身份認證的問題。。
IdentityServer4
IdentityServer4 是 ASP.NET Core的一個包含OpenID Connect和OAuth 2.0協議的框架,提供了單點登錄,集中控制,API訪問控制等功能。
客戶端模式(Client Credentials)
適用於和用戶無關,機器與機器之間直接交互訪問資源的場景。
POST https://api.oauth2server.com/token
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
密碼模式(resource owner password credentials)
適用於當前的APP是專門為服務端設計的情況。
POST https://api.oauth2server.com/token
grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
簡化模式(implicit flow)
適用於瀏覽器WEB應用,支持
- 用戶認證(JavaScript 應用或傳統服務端渲染的Web應用)
- 用戶認證+授權(JavaScript應用)
簡化模式下ID Token和Access Token都是通過瀏覽器的前端通道傳遞的。
所以如果是傳統服務端Web應用並且僅是在服務端使用Access Token的話,推薦使用Hybrid Flow。
授權碼模式(Authorization code flow)
授權碼模式通過后台傳輸Tokens,相對於簡化模式會更安全一點。
但每當考慮使用授權碼模式的時候,請使用混合模式。混合模式會首先返回一個可驗證的ID Token並且有更多其他特性。
混合模式(Hybrid flow)
適用於服務器端 Web 應用程序和原生桌面/移動應用程序。
混合模式是簡化模式和授權碼模式的組合。混合模式下ID Token通過瀏覽器的前端通道傳遞,而Access Token和Refresh Token通過后端通道取得。