上一節課拿到的AccessToken和IdToken
數據庫
在服務端 添加ProfileService類
須要繼承IProfileServiuce
用到的畫圖工具
IprofileService接口裏面有兩個方法, 咱們去實現這兩個方法
這裏是否激活,咱們先設置爲false
IsActive當咱們拿到Subject的時候再去設置爲true,也就是咱們這裏拿到的sub的值爲4的這個。
對應咱們數據裏的這個用戶id。AspNetUsers這個表的主鍵。用戶的id是4
獲取到subjectId
而後根據SubjectId拿到用戶的信息。注入UserManager。命名空間在AspNetCore.Identity命名空間下
緩存
經過SubjectId獲取到用戶的信息,SubjecId其實就是User表的用戶Id
精簡爲一行代碼。當用戶對象不爲空就返回true,那麼IsActive就是True
加上await 和 async
咱們以前沒有啓用用戶的鎖定,若是用戶輸入錯 次數太多。LockoutEnabled就會鎖定
須要對IssuedClaim進行賦值。這些Claims就是從用戶裏來的
Claim在System.Security.Claims這個命名空間下
咱們須要經過GetClaimFormUser這個方法來返回IssuedClaims
JwtClaimTypes返回的都是常量,說白了就是固定的字符串
userName也就是數據庫內的Administrator
經過user獲取到Roles的列表而後 添加到Claims裏面
還須要加上一個頭像的屬性。在ApplicationUser裏面加上了Avatar頭像的這麼一個屬性值
加上Avatar的Claim
把這個方法名字加上Async重命名一下
這樣最終返回了IssuedClaims
cookie
在StartUp裏面
async
由於咱們修改了ApplicationUser,因此須要對數據庫作更新。由於這裏咱們增長了Avatar頭像的屬性,須要對數據庫作遷移
更新數據庫
這樣咱們頭像的字段就加上來了
把AspNetUsers表內的數據刪除掉
工具
刪掉數據以後,執行咱們的seed方法
頭像地址是從網上隨便找的圖片的地址
而後把默認的用戶添加到administrator的角色裏面
運行 role添加失敗了
也有個succeed,若是失敗了就拋出一個異常
再次運行,又報了個錯誤
隨即的一個值,用來設置密碼的,這裏咱們先隨便設置成admin
運行程序 依然報錯
主鍵可能須要改一下,由於它沒有辦法自動生成
ApplicationUserRole也是一樣的
再去作數據遷移
生成的內容比較多,可是有用的就是你這一句
角色也加了一些東西
而後更新數據庫
依然失敗
由於用戶尚未建立成功就去給用戶設置角色了形成了這個錯誤
仍是有錯-_-!
調試,返回了密碼規則錯誤的問題
小寫、特殊符號、大寫、長度這些密碼的規則咱們設置爲false
用戶建立成功 返回了succeed
user表有數據了
頭像字段也有值了
RoleId給了個1
角色表
測試
把cookie都清除掉
啓動客戶端。這樣就可使用123456 簡單的密碼來登錄
點贊成。登錄成功以後跳轉回去
再次清除緩存,登錄
客戶端
這裏調試用VScode調試
能夠看到只有三個Claims
服務端須要設置這裏。這裏作映射,從prolfileServie拿到Claim作一個綁定,綁定過以後才能夠從從ProfileService返回裏面去拿到
這個端口能夠經過Access_token拿到
再次運行測試
role和avatar都拿到了
客戶端的設置。openIdConnect這裏本身要作一個映射
若是不這麼作也能夠經過Access_Token
這裏是發起了另一個請求到咱們5000的端口
其實就至關於,發送了一次請求,把獲取的token又訪問了一次這個地址拿到UserInfo的這幾個信息
咱們還能夠把idToken複製到jwt.io解密出來
他沒有包含頭像的信息,這是由於它是另外發起一個請求到endPoint去哪頭像這些信息
因此客戶端的這裏,GetCliamsFormUserInfoEndpoint設置爲了True
這裏注意,設置的也就是頁面上拿到的IdToken
服務端設置,這裏爲true,那麼這些信息都被加密在idtoken裏面
客戶端這裏就不用設置了。
客戶端這裏也能夠去掉了
一種是經過發起另外的請求去獲取用戶的信息,另一種是在訪問idToken直接就帶過來了
客戶端和服務端再重啓
客戶端的cookie再次清除
這樣用戶的信息直接在idToken裏面都返回了
解密下idToken
加密