Code在Oauth2.0和OpenId Connect裏面分別叫作不一樣的名字
OAuth只介紹瞭如何受權。沒有介紹如何身份認證、
OpenId Connect:既規定了怎麼受權,也規定了怎麼身份認證
OpenlD Connect是在OAuth2.0身份證協議之上作的身份認證協議,它裏面規定了三種flow分別是
Authorization Code Flow、Implicit Flow、 Hybird Flow
今天主要講Authoriztion Code,
OAuth2.0裏面的流程圖
OpenId Connect
不必定的地方主要是這裏,除了會獲取access token以外,還會獲取 Id token
新建MVC的客戶端應用
修改啓動的端口爲5002
startUp裏面。把JWT的Claim類型映射關閉了以便容許有一個WhereNo的Claim。若是不關閉的話它就會修改從受權服務器返回的各類Claim
而後註冊身份認證中間件;cookie的名稱要保持一致
AddCookie表示使用Cookie來驗證的首選方式
受權服務器的地址:
設置不須要Https
表示把獲取的token存到cookie裏面,由於之後可能會用
先把Scope清空,再去添加Scope
添加身份認證的中間件
而後保護HomeController,只有受權用戶才能夠訪問這個Controller後端
這裏設置容許兩種受權方式
後綴的地址都是默認的,固然也能夠修改。這裏先用默認的
把受權服務器運行起來
MVC的客戶端運行後會自動跳轉到受權服務器上
輸入用戶名和密碼進行登錄
而後就跳轉會了客戶端
至關於走了這一步,把Authorization Code給帶回來了
而後受權服務器驗證經過後,會把Access Token 和Id Token返回來。若是客戶端設置了refresh token的話 還會去訪問 refresh token
Authorization code是經過瀏覽器重定向返回來的,請求Authorization code是瀏覽器端得到的
Access Token是MVC的後端,至關因而服務器請求了 Identity Server的服務器端,就是服務器對服務器
爲了掩飾先把Cookie都清理乾淨
刷新客戶端瀏覽器會從新登錄
登錄成功後點擊 Privacy
idToken也有值了
refresh token沒有值
Authorization code 也沒有。是由於Authorization code只能用一次,一單請求了Access Token了就會從客戶端自動移除
咱們在服務端已經設置了 運行Refresh Token了 這裏已經設置爲True了,爲何沒有呢
客戶端這裏必須加上這個Scope才能夠
oidc的常量咱們能夠F12反編譯進去
再次運行,把cookie清理乾淨。再次運行 此次有值了RefreshToken
經過瀏覽器來看 請求的過程。F12設置瀏覽器
而後刷新頁面,從新登錄
而後再清楚Cookie 用fiddler來監視請求
第二來回token的請求,走了後端通道,服務器對服務器
把數據放到ViewData展現
再把user的Claims循環輸出
修改服務端受權服務器Scope都弄上
再改客戶端這幾種也都加上
發現客戶端輸出的 仍是那些。
服務端須要設置爲True
從新運行,記得清理cookie,這樣就都獲取到了api
代碼視頻沒錄,和以前課程的代碼是同樣的
最終請求的結果
刷新頁面這些數據依然存在,會話進行保存了使用cookie
打開受權服務器的地址,也能夠看到是登錄的狀態瀏覽器
須要兩步,首先是客戶端退出了。而後認證服務器也退出了
若是登錄了就顯示退出的按鈕
這裏至關於MVC網站的cookie退出了
而後再把IdentityServer的cookie也退出
這裏沒有返回結果
再次走一遍登錄和退出的效果
點擊Privacy須要受權
登錄以後能夠訪問了
點擊退出的按鈕後,頁面停留在IdentityServer4的頁面上
點擊這個Here纔會回到咱們的客戶端頁面
這是點擊here回到本身的網站
服務器