.NET Core IdentityServer4实战 第六章-Consent授权页
在identityServer4中登陸頁面只要是成功了,就會注冊一個Cookie在服務器資源上,像現在大部分的網站第三方授權,都是經過一個頁面,然后選需要的功能,IdentityServer4也給我們提供了,只要你登陸成功,就會跳轉到Consent/Index(Get)中,所以我們只要在其中做手腳就好了。
在編寫代碼之前我們要知道IdentityServer的三個接口,?IClientStore?是存放客戶端信息的,?IResourceStore?是存放資源API信息的,這兩個接口都是在IdentityServer4的Stores的命名空間下,還有一個接口是?IIdentityServerInteractionService?用于與IdentityServer通信的服務,主要涉及用戶交互。它可以從依賴注入系統獲得,通常作為構造函數參數注入到IdentityServer的用戶界面的MVC控制器中。
下面我們創建一個Consent控制器在認證服務器上,名為?ConsentController?,在其中我們需要將這三個接口通過構造函數構造進來。
在控制器中,因為登陸成功是從Account控制器調過來的,那個時候還帶著ReturnUrl這個而參數,我們在這個控制器中也需要ReturnUrl,所以在Get方法中寫上該參數,要不然跳轉不過來的。
其中調用了?BuildConsentViewModel?方法用于返回一個consent對象,其中我們使用?_identityServerInteractionService?接口獲取了上下文,然后再通過其余的兩個接口找到它客戶端還有資源api的信息。然后再調用了自定義的?CreateConsentViewModel?對象創建了consent對象。
以上我們的控制器就完成了,現在我們搞一下視圖,在視圖中我們就是簡單做一下,使用ConsentVm作為視圖綁定對象,在之中我遇到了一個Bug,我用?@Html.Partial("_ScopeListItem", item);?的時候突然就報錯了,在頁面上顯示一個Task一大堆的錯誤信息,我也不知道啥情況(望大佬解決),換成不是異步的就行了。
下面是局部視圖的定義,傳過來的對象是?ResourceScopes?和?IdentityScopes?,但他們都是對應ScopeVm,在其中呢就是把他們哪些權限列出來,然后勾選,在它的父頁面已經做了post提交,所以我們還得弄個控制器。
?這個方法的參數是我們所自定義的實體,其中有按鈕還有返回的地址,在其中我們判斷了是否選擇OK,選擇不那就直接賦一個拒絕的指令,如果ok那么就直接判斷是否有這個權力,因為我們在config中進行了配置,然后如果有,呢么就直接添加,在不==null的清空下,我們根據?returlUrl?這個字符串獲取了請求信息,然后通過?GrantConsentAsync?方法直接同意了授權,然后直接跳轉過去,就成功了。
最后,在調試的時候一定要Client的?RequireConsent?設置為true.?
原文地址:https://www.cnblogs.com/ZaraNet/p/11146224.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的.NET Core IdentityServer4实战 第六章-Consent授权页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET开发框架(四)-服务器IIS实践
- 下一篇: 小白开学Asp.Net Core 《五》