上一篇文章我們介紹了Asp.net core中身份驗證的相關內容,并通過下圖描述了身份驗證及授權的流程:
- 創建一個簡單的單頁應用專案
- 使用單頁應用完成受保護資源訪問
- oidc Client簡介
- oidc-client.js的各種用法
- 彈出式登錄/登出
- 靜默登錄與靜默重繪
- 會話監聽
- 小結
創建一個簡單的單頁應用專案
注:該單頁應用完全參考官方檔案,本小節僅對要點進行介紹,詳情參見檔案:https://identityserver4.readthedocs.io/en/latest/quickstarts/4_javascript_client.html 1、新建一個asp.net core的web應用程式:
- 授權型別支持授權碼型別;
- 不需要客戶端密碼;
- 允許跨域,允許客戶端跨域訪問IdentityServer;
5、添加功能頁面Index.html,包含登錄、API訪問及登出功能:
使用單頁應用完成受保護資源訪問
我們使用一個簡單的asp.net core web api專案(本系列文章用過的)來進行演示,它對于普通API專案來說要點在于: 1、添加基于JwtBearer的身份驗證處理器:
oidc-client.js簡介
前面的內容是基于oidc-client.js,即JavaScript版本的oidc客戶端類別庫來實作的單頁應用的,那么oidc-client.js到底為我們提供了什么功能呢? oidc-client.js是一個支持OIDC和Oauth2.0協議的JavaScript類別庫,除此之外它還提供用戶會話和Token的管理功能,類別庫中的核心型別是UserManager,它提供了用戶登錄、登出、用戶資訊管理等高層次的API,上面的例子中就是使用UserManager來完成的登錄、用戶資訊(Access Token)獲取以及登出的, oidc-client.js或者直接說UserManager使用上需要注意以下幾個方面:- 配置:配置的目的和asp.net core基于oidc身份驗證的配置類似,主要是指明identityServer的地址、用于授權的Client資訊、授權所使用的流程(授權碼還是隱式流程)、授權完成后的跳轉地址以及請求的Scope資訊等(更多配置引數可查看檔案:https://github.com/IdentityModel/oidc-client-js/wiki),如下圖所示:

- 方法:提供了用戶管理、登錄、登出、以及相關回呼方法,除此之外還有會話狀態查詢和開啟/關閉靜默重繪(token)的方法,登錄/登出分為三種型別:跳轉、靜默和彈出,具體如何使用后續介紹,

- 屬性:可以回傳UserManager的配置、事件以及元資料服務,
- 事件:UserManager包含了8個事件,如用戶登錄/登出、access token過期等:

oidc-client.js的各種用法
彈出式登錄/登出
彈出式登錄/登出就是字面的意思,通過彈出視窗打開IdentityServer的登錄/登出頁面完成相應功能, 下圖為彈出式登錄(僅需呼叫UserManager的signinPopup方法即可):
靜默登錄與靜默重繪
靜默登錄和靜默重繪指的就是signinSilent和startSilentRenew兩個方法,而且需要注意的是startSilentRenew的原理實際上是關注了accessTokenExpiring事件,當token即將過期時呼叫signinSilent進行靜默登錄, 靜默登錄方式又有兩種其一是基于會話的,其二是基于重繪token,其中重繪token的優先級較高,換句話就是重繪token存在的時候,它就默認使用重繪token進行登錄,重繪token比較好理解,但是會話是什么呢?它實際上就是通過IdentityServer的登錄后所保持的狀態,文章最開始的流程圖中提到過,我們之所以可以通過授權碼流程進行授權是因為登錄之后有權訪問IdentityServer受保護的授權終結點,從而可以獲取授權碼及相關Token,那這里的原理就是瀏覽器保存了登錄狀態,所以可以再次訪問授權終結點來獲取并重繪Token資訊, 基于會話的靜默登錄,下圖為點擊靜默登錄按鈕后發起的請求資訊,也就是正常的請求到授權碼之后獲取token及用戶資訊的程序:
會話監聽
會話監聽是默認開啟的,在正常登錄狀態下,通過新的瀏覽器視窗從identityserver中登出(目的是清除identityserver存盤在瀏覽器的會話資訊):
小結
本篇文章介紹了單頁應用使用IdentityServer進行身份驗證的程序及oidc-client.js JavaScript類別庫在應用中的使用,oidc-client.js為我們適配了oidc協議,同時還提供了豐富的功能和機制,使用這個類別庫可以大大減少實際作業中的開發量, 說到單頁應用的身份驗證,它最根本的機制無非就是獲得Access Token和Refresh Token,使用Access Token作為身份資訊載體來完成身份驗證,使用Refresh Token作為更新Access Token的鑰匙,通過保證Access Token不過期來保證用戶能夠正常訪問相關資源, 但如果使用Oauth2.0協議來實作單頁應用的登錄(Password授權模式)會存在一些問題,首先是單頁應用對于授權服務器來說是不可信的,但是Password授權由單頁應用發起,屬于授權服務器的用戶資訊及密碼都要經過不可信的單頁應用,這會造成一些安全問題,其次使用Oauth2.0協議完成授權后,應用與授權服務器之間實際上就沒有任何關聯了,授權服務器不保留用戶會話,也無法實作用戶登出聯動的功能(即一方登出可以通知另一方),這些也正是IdentityServer4或者說OIDC協議所處理的內容, 下篇文章,我們將繼續以IdentityServer4或者說OIDC的會話管理開始,深入聊一聊它們的登錄與登出, 參考: https://identityserver4.readthedocs.io/en/latest/quickstarts/4_javascript_client.html https://github.com/IdentityModel/oidc-client-js/wiki 本文鏈接:https://www.cnblogs.com/selimsong/p/14483664.html 從零搭建一個IdentityServer——目錄(更新中...)轉載請註明出處,本文鏈接:https://www.uj5u.com/net/266177.html
標籤:.NET Core
上一篇:一日一技:微信開發-自定義選單
下一篇:一日一技:微信開發-自定義選單
